-
Notifications
You must be signed in to change notification settings - Fork 22
/
Copy pathHitTheNumber.java
46 lines (42 loc) · 965 Bytes
/
HitTheNumber.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class HitTheNumber {
public int[] solution(int A) {
for (int length = 1;; length++) {
int[] sequence = new int[length];
sequence[0] = 1;
if (search(sequence, 1, A)) {
return sequence;
}
}
}
boolean search(int[] sequence, int index, int A) {
if (index == sequence.length) {
return sequence[sequence.length - 1] == A;
}
if (!isPossible(sequence, index, A)) {
return false;
}
for (int i = index - 1; i >= 0; i--) {
if (sequence[i] * 2 <= sequence[index - 1]) {
break;
}
for (int j = i; j >= 0; j--) {
int next = sequence[j] + sequence[i];
if (next <= sequence[index - 1]) {
break;
}
sequence[index] = next;
if (search(sequence, index + 1, A)) {
return true;
}
}
}
return false;
}
boolean isPossible(int[] sequence, int index, int A) {
int last = sequence[index - 1];
for (int i = index; i < sequence.length; i++) {
last *= 2;
}
return last >= A;
}
}