我正在尝试创建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()); //[]
}
}
答案 0 :(得分:0)
问题最有可能是您未向我们展示的isPalindrome
方法。
还有其他一些问题:
pal
字段应该是findPal
方法中的局部变量。 (提示:如果你两次致电findPal()
会怎样?一旦你在isPalindrome
找到了这个错误,试试吧......)
您创建的回文数字列表很可能包含重复项。例如,如果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 如果它是相同的那么它是回文 我知道它很长但是最简单的东西!