backtracking + dfs + recursive
784. Letter Case Permutation
Easy
49661FavoriteShare
Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string. Return a list of all possible strings we could create.
Examples: Input: S = "a1b2" Output: ["a1b2", "a1B2", "A1b2", "A1B2"] Input: S = "3z4" Output: ["3z4", "3Z4"] Input: S = "12345" Output: ["12345"]Note:
S
will be a string with length between1
and12
.S
will consist only of letters or digits.
public static List<String> letterCasePermutation(String S) {
List<String> ans = new ArrayList<>();
dfs(ans, new StringBuilder(S), 0);
return ans;
}
/**
*
* @param list 将每一次得到的字符串加到list
* @param sb
* @param i 当前处理第i位
*/
private static void dfs(List<String> list, StringBuilder sb, int i) {
//递归出口,递归树的叶子节点
if (i == sb.length()) {
list.add(sb.toString());
return;
}
//仅向后移动1位
dfs(list, sb,i+1);
if (Character.isLetter(sb.charAt(i))) {
sb.setCharAt(i, (char)( sb.charAt(i) ^ (1<<5)));
dfs(list, sb,i+1);
sb.setCharAt(i, (char)( sb.charAt(i) ^ (1<<5)));
}
}