创建回文数列表

时间:2018-05-05 01:30:20

标签: java algorithm palindrome

我正在尝试创建List回文数字,这些数据来自两个3位数字的乘积,但它返回[]。我做错了什么?

编辑:我最初无法添加isPalindrome函数导致stackoverflow会抱怨“我的帖子主要是代码”我的isPalindrome函数有什么问题吗?

public class Solution {




//list of digit numbers of a number
ArrayList<Long> digits = new ArrayList<>();

//list of palindrome numbers
public ArrayList<Long> pal = new ArrayList<>();


// checks if the given number is a palindrome
boolean isPalindrome(long num) {


// creates list of digit numbers of a number
// ex. 12345 -> [5,4,3,2,1]
while(num > 0) {
  long lastdigit = num % 10;
  digits.add(lastdigit);
  num = num / 10;
}

//checks if the number is a palindrome by checking the first and last index

// when the number of digits is even
if(digits.size() % 2 == 0) {
  while(digits.size() > 0) {
    int last = digits.size() - 1;

    if (digits.get(0) == digits.get(last)) {
      digits.remove(last);
      digits.remove(0);
    }
    else {
      return false;
      }

    }
return true;

  }

// when the number of digits is odd
else  while(digits.size() > 1) {

  int last = digits.size() - 1;
  if (digits.get(0) == digits.get(last)) {
    digits.remove(last);
    digits.remove(0);
  }
  else {
    return false;
    }

  }

  return true;

}


    ArrayList<Long> findPal() {

        for (long i = 100; i <= 999; i++) {
            for (long j = 100; j <= 999; j++) {
                Long product = i * j;

                if (isPalindrome(product)) {
                    pal.add(product);
                }
            }
        }
        return pal;
    }
    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.isPalindrome((long)121)); //true
        System.out.println(sol.isPalindrome((long)12345)); // false
        System.out.println(sol.findPal()); //[]
    }
}

3 个答案:

答案 0 :(得分:0)

问题最有可能是您未向我们展示的isPalindrome方法。

还有其他一些问题:

  1. pal字段应该是findPal方法中的局部变量。 (提示:如果你两次致电findPal()会怎样?一旦你在isPalindrome找到了这个错误,试试吧......)

  2. 您创建的回文数字列表很可能包含重复项。例如,如果104 x 521是一个回文数字,那么521 x 104也是如此。

答案 1 :(得分:0)

修改

在isPalindrome()函数

if (digits.get(0) == digits.get(last)) {
      digits.remove(last);
      digits.remove(0);
 }
 else {
    return false;
 }

在Else块中,您需要清空数字列表。这是你没有清空它的主要问题。

我只是使用你的代码并创建了我的isPalindrome函数,一切正常。

看看这段代码。

public class Solution {

    ArrayList<Long> digits = new ArrayList<>();

    ArrayList<Long> pal = new ArrayList<>();

    ArrayList<Long> findPal() {

        for (long i = 100; i <= 999; i++) {
            for (long j = 100; j <= 999; j++) {
                Long product = i * j;

                if (isPalindrome(product)) {
                    pal.add(product);
                }
            }
        }
        return pal;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.isPalindrome((long) 121)); // true
        System.out.println(sol.isPalindrome((long) 12345)); // false
        System.out.println(sol.findPal()); // []
    }

    private boolean isPalindrome(Long longValue) {

        Long temp = longValue;
        String tempLong = "";
        while (temp != 0) {
            tempLong = tempLong + temp % 10 + "";
            temp = temp / 10;
        }

        return Long.parseLong(tempLong) == longValue;
    }
}

答案 2 :(得分:0)

你必须有一个函数,在从循环中传递数字后,它应该将数字分成一个数字,如果反向也是真的,则应该返回

例如: 121-> 121%10 - > 1 然后121/10 - &gt; 12 同样地,这样做直到其模数不为零 然后将最高数字乘以(数字-1的len) 1 * 100 + 2×10 + 1 如果它是相同的那么它是回文 我知道它很长但是最简单的东西!