Leetcode Java Numbers With Same Consecutive Differences
업데이트:
문제
코드
class Solution {
public int[] numsSameConsecDiff(int n, int k) {
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 9; i++) {
this.dfs(list, i, 1, n, k);
}
int length = list.size();
int[] result = new int[length];
for (int i = 0; i < length; i++) {
result[i] = list.get(i);
}
return result;
}
private void dfs(List<Integer> list, int item, int i, int n, int k) {
if (i == n) {
list.add(item);
} else {
int a = item % 10;
if (k == 0) {
this.dfs(list, (item * 10) + a, i + 1, n, k);
} else {
if ((a + k) <= 9) {
this.dfs(list, (item * 10) + (a + k), i + 1, n, k);
}
if ((a - k) >= 0) {
this.dfs(list, (item * 10) + (a - k), i + 1, n, k);
}
}
}
}
}
결과
설명
-
n 길이의 숫자 중 앞뒤 자리가 k인 숫자들을 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- list는 해당 조건에 맞는 숫자들을 저장할 변수로, ArrayList로 초기화하고 3번에서 정의한 dfs(List
list, int item, int i, int n, int k) 메서드를 1부터 9까지 i를 증가시키며 수행한 결과를 넣어준다. - length는 위에서 수행된 list의 길이를 저장한 변수이다.
- result는 결과를 저장할 변수로, length 길이의 정수 배열로 초기화하고 list의 결과를 그대로 넣어 주어진 문제의 결과로 반환한다.
- list는 해당 조건에 맞는 숫자들을 저장할 변수로, ArrayList로 초기화하고 3번에서 정의한 dfs(List
- DFS 방식으로 값을 탐색하기 위한 dfs(List
list, int item, int i, int n, int k) 메서드를 메서드를 정의한다. - i가 n인 자릿수가 맞는 경우, list에 item을 넣어준다.
- 위의 경우가 아니라면 a에 item을 10으로 나눈 나머지를 넣어주고 아래를 수행한다.
- k가 0인 차이가 없을 경우 item에 $(item \times 10) + a$와 i에 1을 증가시켜 재귀 호출을 수행한다.
- 위의 경우가 아니고 $a + k$가 9 이하인 경우, item에 $(item \tiems 10) + (a + k)$와 i에 1을 증가시켜 재귀 호출을 수행한다.
- 위의 경우가 아니고 $a + k$가 0 이상인 경우, item에 $(item \tiems 10) + (a - k)$와 i에 1을 증가시켜 재귀 호출을 수행한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기