我目前正在尝试解决Problem 38 of Project Euler,虽然我自己尝试解决所有问题,但我觉得自己似乎遇到了问题。我想我需要你的帮助。
所以这是我的代码:
import java.util.Arrays;
public class PandigitalMultiples{
public static void main(String[]args){
long c = 0;
long pdLong = 0;
for(int i = 1; i < 10000; i ++){
String pdString = "";
for(int n = 1; pdString.length() <= 9; n++){
long p = n * i;
String pString = String.valueOf(p);
pdString = pdString + pString;
pdLong = Long.parseLong(pdString);
if(is1To9Pandigital(pdString) && pdLong > c && pdLong < 1000000000 && n > 1){
c = pdLong;
}
}
}
System.out.println(c);
}
public static boolean is1To9Pandigital (String pNumber){
int length = pNumber.length();
if(length != 9){
return false;
}
char[]chars = pNumber.toCharArray();
int[]digits = new int[chars.length];
for(int i = 0; i < chars.length; i++){
digits[i] = chars[i] - '0';
}
int[]allDigits = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
boolean contains = Arrays.asList(digits).containsAll(Arrays.asList(allDigits));
if(contains == true){
System.out.println(pNumber);
return true;
}
else
return false;
}
}
问题似乎是即使像918273645 Arrays.asList(digits).containsAll(Arrays.asList(allDigits))
这样的数字也会返回false并且我不知道为什么!
也许有人可以帮助我?我真的很感激!
答案 0 :(得分:5)
Arrays.asList()
,当传递一个原始数组时,会产生一个List,其单个元素是输入数组。如果您传递的是Integer[]
而不是int[]
,它将按您预期的方式运行。
只需更改
int[] digits = new int[chars.length];
for(int i = 0; i < chars.length; i++){
digits[i] = chars[i] - '0';
}
int[] allDigits = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
到
Integer[] digits = new Integer[chars.length];
for(int i = 0; i < chars.length; i++){
digits[i] = chars[i] - '0';
}
Integer[] allDigits = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9};