-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy path1286.Iterator-for-Combination.java
66 lines (54 loc) · 1.87 KB
/
1286.Iterator-for-Combination.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// https://leetcode.com/problems/iterator-for-combination/
// algorithms
// Medium (63.4%)
// Total Accepted: 3,064
// Total Submissions: 4,758
// beats 100.0% of java submissions
class CombinationIterator {
private char[] originCharArray;
private char[] curCharArray;
private int combinationLength;
private int originStringLength;
public CombinationIterator(String characters, int combinationLength) {
this.originCharArray = characters.toCharArray();
this.curCharArray = Arrays.copyOf(originCharArray, combinationLength);
this.combinationLength = combinationLength;
this.originStringLength = characters.length();
}
public String next() {
String res = new String(curCharArray);
int targetIdx = -1;
for (int i = 0; i < combinationLength; i++) {
int cIdx = combinationLength - i - 1;
int oIdx = originStringLength - i - 1;
if (curCharArray[cIdx] != originCharArray[oIdx]) {
targetIdx = cIdx;
break;
}
}
if (targetIdx == -1) {
curCharArray = null;
} else {
int beginIdx = -1;
for (int i = 0; i < originStringLength; i++) {
if (originCharArray[i] == curCharArray[targetIdx]) {
beginIdx = i + 1;
}
}
System.arraycopy(originCharArray, beginIdx, curCharArray, targetIdx, combinationLength - targetIdx);
}
return res;
}
public boolean hasNext() {
if (curCharArray == null) {
return false;
}
return true;
}
}
/**
* Your CombinationIterator object will be instantiated and called as such:
* CombinationIterator obj = new CombinationIterator(characters,
* combinationLength); String param_1 = obj.next(); boolean param_2 =
* obj.hasNext();
*/