【问题标题】:Check if an array is palindrome检查数组是否为回文
【发布时间】:2019-03-19 20:24:05
【问题描述】:

我无法解决如何检查阵列是否被镜像

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int a=0 ;
    System.out.print("Array length:");
    int b= sc.nextInt();    
    int [] array = new int [b];
    for(int i=0;i<b;i++) {
        System.out.print("Type the number "+i+" element: ");
        a=sc.nextInt();
        array[i]=a;
    }
    System.out.println(Arrays.toString(array));
    sc.close();
}

当我输入例如 Array length: 3 并且我的数字是 1 2 1

数组长度:3
键入数字 0 元素:1
输入数字 1 元素:2
键入数字 2 元素:1
[1, 2, 1]

我在控制台中得到了这个,但现在我不知道它是否被镜像。

【问题讨论】:

  • 作为人类,您将如何确定该阵列是否已镜像?
  • 首先检查最后一个元素和第一个元素是否相等......然后是第二个和最后一个......直到你在中心相遇
  • 如果我理解正确,您可以将第一个数组元素与最后一个元素进行比较,将第二个元素与倒数第二个元素进行比较,etc。直到找到不匹配或到达中间。由于元素的数量直到运行时才确定,因此您需要为此使用循环。

标签: java arrays palindrome


【解决方案1】:

我不是 100% 确定您对镜像的定义。但这将检测对称阵列。希望能帮助到你。

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int a=0 ;
        System.out.print("Array length:");
        int b= sc.nextInt();    
        int [] array = new int [b];
        for(int i=0;i<b;i++) {
            System.out.print("Type the number "+i+" element: ");
            a=sc.nextInt();
            array[i]=a;
        }
        System.out.println(Arrays.toString(array));

        int l = (b - b%2)/2;
        boolean mirrored = true;
        for(int i=0;i<l;i++) {
            if(array[i]!=array[array.length-1-i]) {
                mirrored = false;
                break;
            }
        }      
        if(mirrored) {
            System.out.println("The array is mirrored!! Fantastic.");
        }
        sc.close();
    } 

【讨论】:

    【解决方案2】:

    您可以通过将其与原始数组的反向副本进行比较来检查该数组是否为回文。使用来自 Apache commons 的 ArrayUtils.reverse

    int[] arrCopy = Arrays.copyOf(array, array.length);
    ArrayUtils.reverse(arrCopy);
    boolean isPalindrome = Arrays.equals(array, arrCopy);
    

    查看更多How do I reverse an int array in Java?

    【讨论】:

      【解决方案3】:

      如果您在 main 本身中测试代码,则制作一个小 sn-p

      int length = array.length;
      boolean mirror = true;
      for (int index = 0; index < array.length; index++) {
          if(mirror) {
              int start = array[index];
              int end = array[--length];
              if (length < index) {
                  break;
              }
              if (start != end) {
                  mirror = false;
              }
          }
      }
      if(mirror) {
          System.out.println("is mirror");
      }
      else {
          System.out.println("is not mirror");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-10
        • 2017-12-11
        • 1970-01-01
        相关资源
        最近更新 更多