Letter Case Permutation
簡單的 DFS,不過還是讓我弄了有點久...
想法很簡單,遇到字母就繼續DFS,遇到數字就繼續
我卡在的點是,我是寫
if (start == s.length()-1) {
results.add(s);
}
但這種寫法會導致 123 這種沒有字母的 string 加不進去結果,
其實是一進來一個遞迴的字串我們都要算進去結果,只是進去遞迴的的是字母更改的結果
還有一點是,java string 沒有 setChatAt(),只能用 substring or StringBuilder.setChatAt() 來改某個字元
public List<String> letterCasePermutation(String S) {
List<String> results = new ArrayList<>();
if (S == null || S.length() == 0) {
results.add(S);
return results;
}
helper(results, S, 0);
return results;
}
private void helper(List<String> results, String s, int start) {
results.add(s);
for (int i=start; i<s.length(); i++) {
if (isAlphabet(s, i)) {
helper(results, transform(s, i), i+1);
} else {
continue;
}
}
}
private boolean isAlphabet(String s, int i) {
char c = s.charAt(i);
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
}
private String transform(String s, int i) {
StringBuilder sb = new StringBuilder();
sb.append(s);
if (Character.isLowerCase(s.charAt(i))) {
sb.setCharAt(i, Character.toUpperCase(s.charAt(i)));
} else if (Character.isUpperCase(s.charAt(i))) {
sb.setCharAt(i, Character.toLowerCase(s.charAt(i)));
}
return sb.toString();
}