在java中查找唯一的9位可聚合数字?

时间:2017-04-02 19:27:19

标签: java arrays

好的,所以我并没有真正解决整个问题,但我需要缩短运行时间,任何建议?现在它可以工作,但它有一个疯狂的长运行时间。我不是一个伟大的程序员,所以我需要缩短它。该程序试图找到一个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;
}

0 个答案:

没有答案