我目前正在尝试解决Euler项目的问题38,虽然我显然试图自己解决所有问题但我似乎遇到了一堵砖墙,我想我需要你的帮助.
所以这是我的代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
问题似乎是,即使像918273645这样的数字Arrays.asList(digits).containsAll(Arrays.asList(allDigits))返回false,我也不知道为什么!
也许有人可以帮助我?我真的很感激!
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};
Run Code Online (Sandbox Code Playgroud)
至
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};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |