Cindy's Blog

アマゾンで働いているエンジニアの日常

LeetCode 967. Numbers With Same Consecutive Differences

interestring question.

The order of calculation is very important.

class Solution {
    public int[] numsSameConsecDiff(int n, int k) {
        //10 ^ n => max 10^9..
        List<Integer> answer = new ArrayList<>();
        
        for (int lastDigit = 1; lastDigit <= 9; lastDigit++){
            findAnswer(n, k, 1, lastDigit, lastDigit, answer);
        }
        
        int[] finalAnswer = new int[answer.size()];
        for (int i = 0; i < answer.size(); i++){
            finalAnswer[i] = answer.get(i);
        }
        
        return finalAnswer;
    }
    
    private void findAnswer(int n, int k, int digit, int lastDigit, int currentNumber, List<Integer> answer){
        if (digit == n){
            answer.add(currentNumber);
            return;
        }
        
        if (lastDigit - k >= 0 && k != 0){
            findAnswer(n, k, digit + 1, lastDigit - k, currentNumber * 10 + lastDigit - k, answer);
        }
       
        if (lastDigit + k < 10)  {
            findAnswer(n, k, digit + 1, lastDigit + k, currentNumber * 10 + lastDigit + k, answer);
        }
    }
}