好的,所以我并没有真正解决整个问题,但我需要缩短运行时间,任何建议?现在它可以工作,但它有一个疯狂的长运行时间。我不是一个伟大的程序员,所以我需要缩短它。该程序试图找到一个9位数字,其中每个数字在1到9之间是唯一的,也是可多边形的。只有一个答案。
public int getFirstKDigitNumber(int[] digits, int k) {
StringBuilder numString = new StringBuilder();
for (int i = 0; i < k; i++) {
numString.append(digits[i]);
}
int result = Integer.parseInt(numString.toString());
return result;
}
/**
* Method to check if the specified number is divisible by the divisor
*
* @param number
* @param divisor
* @return true if number is divisible by the divisor
*/
public boolean isDivisible(int number, int divisor) {
if (number % divisor == 0)
return true;
else
return false;
}
/**
* Method to check if 9 digit number is self divisible
* @param array of 9 digits
* @return true if number is self divisible
*/
public boolean isSelfDivisible(int[]digits) {
boolean isSelfDivisible = true;
for (int j = 1; j<10; j++) { //check if number is self divisible
int kDigits = getFirstKDigitNumber(digits, j);
if (isDivisible(kDigits, j) == false) {
isSelfDivisible = false;
}
}
return isSelfDivisible;
}
/**
* Method to create the digit array from the 9 digit int
* @param 9 digit int
* @return array of 9 digits
*/
public int[] createDigitArray(int a) {
String numString = Integer.toString(a);
int[] digits = new int[9];
for (int i = 0; i < 9; i++) { // change the int to an array for
// use by other methods
digits[i] = numString.charAt(i) - '0';
}
return digits;
}
/**
* Method to return a list containing all self divisible numbers found
*
* @return 9-digit self divisible numbers
*/
public List<Integer> getSelfDivisibleNumbers() {
for (int i = 123456789; i <= 987654321; i++) {
boolean allUniqueDigits = containsAllDigitsOnce(i);
if (allUniqueDigits == true) {
int[] digits = createDigitArray(i);
if (isSelfDivisible(digits)) {
this.selfDivisibleNumbers.add(i);
}
}
}
return this.selfDivisibleNumbers;
}
/**
* Method to return the number of self divisible numbers found
*
* @return number of 9-digit self divisible numbers
*/
public int getNumberOfSelfDivisibleNumbers() {
return getSelfDivisibleNumbers().size();
}
/**
* Method to check if 9 digit number contains every digit 1...9 once
* @param number
* @return containsAllDigitsOnce
*/
public boolean containsAllDigitsOnce(int number) {
int num = number;
boolean containsAllOnce = true;
int[] oneToNine = {1, 2, 3, 4, 5, 6, 7, 8, 9};
while (num>0) {
int nextNum = num%10;
boolean isValidNum = false;
for (int i =0; i<oneToNine.length; i++) {
if (nextNum == oneToNine[i]) {
isValidNum = true;
oneToNine[i] = 10; //change to 2 digit number in case number contains 0
}
}
if (isValidNum == false) {
containsAllOnce = false;
}
num = num/10;
}
return containsAllOnce;
}