题目
给定一个字符串S
,通过将字符串S
中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。
示例: 输入: S = "a1b2" 输出: ["a1b2", "a1B2", "A1b2", "A1B2"] 输入: S = "3z4" 输出: ["3z4", "3Z4"] 输入: S = "12345" 输出: ["12345"]
注意:
S
的长度不超过12
。S
仅由数字和字母组成。
思路
回溯法:当前字符若是数字则直接搜索下一个位置,若当前是英文字母,则分成两种情况分别向下搜索。当当前下标与字符串长度相等则将变量串添加到结果集合中。
代码
public List<String> letterCasePermutation(String S) {
List<String> res = new LinkedList<>();
dfs("", S, res, 0);
return res;
}
public void dfs(String pre, String S, List<String> res, int index) {
if (index == S.length())
res.add(pre);
else {
char ch = S.charAt(index);
if (!Character.isLetter(ch))
dfs(pre + ch, S, res, index + 1);
else {
ch = Character.toLowerCase(ch);
dfs(pre + ch, S, res, index + 1);
ch = Character.toUpperCase(ch);
dfs(pre + ch, S, res, index + 1);
}
}
}