Problem 8 All Subset II of Size K
Method 1: 加或者不加
public class Solution {
public List<String> subSetsIIOfSizeK(String set, int k) {
// sanity check
List<String> result = new ArrayList<String>();
if (set == null) {
return result;
}
char[] arraySet= set.toCharArray();
Arrays.sort(arraySet);
StringBuilder curResult = new StringBuilder();
helper(result, curResult, 0, k, arraySet);
return result;
}
private void helper(List<String> result, StringBuilder curResult, int curIndex, int setSize, char[] arraySet) {
if (curResult.length() == setSize) {
result.add(new String(curResult));
return;
}
if (curIndex == arraySet.length) {
return;
}
// // add
// curResult.append(arraySet[curIndex]);
// helper(result, curResult, curIndex + 1, setSize, arraySet);
// curResult.deleteCharAt(curResult.length() - 1);
// // not add
// while (curIndex + 1 < arraySet.length && arraySet[curIndex] == arraySet[curIndex + 1]) {
// curIndex++;
// }
// helper(result, curResult, curIndex + 1, setSize, arraySet);
int originalIndex = curIndex;
while (curIndex < arraySet.length - 1 && arraySet[curIndex] == arraySet[curIndex + 1]) {
curIndex++;
}
helper(result, curResult, curIndex + 1, setSize, arraySet);
curIndex = originalIndex;
curResult.append(arraySet[curIndex]);
helper(result, curResult, curIndex + 1, setSize, arraySet);
curResult.deleteCharAt(curResult.length() - 1);
}
}
解法可参照problem 1
Method 2: 每一次都加?
public class Solution {
public List<String> subSetsIIOfSizeK(String set, int k) {
// Write your solution here
List<String> result = new ArrayList<>();
if (set == null) {
return result;
}
char[] charSet = set.toCharArray();
StringBuilder curString = new StringBuilder();
Arrays.sort(charSet);
dfs(charSet, curString, k, 0, result);
return result;
}
private void dfs(char[] charSet, StringBuilder curString, int k, int index, List<String> result) {
if (curString.length() == k) {
result.add(new String(curString));
}
if (curString.length() > k) {
return;
}
for (int i = index; i < charSet.length; i++) {
if (i == index || charSet[i] != charSet[i - 1]) {
curString.append(charSet[i]);
dfs(charSet, curString, k, i + 1, result);
curString.deleteCharAt(curString.length() - 1);
}
}
}
}
Last updated