给定一个字符串S
,通过将字符串S
中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。
示例: 输入: S = "a1b2" 输出: ["a1b2", "a1B2", "A1b2", "A1B2"] 输入: S = "3z4" 输出: ["3z4", "3Z4"] 输入: S = "12345" 输出: ["12345"]
注意:
S
的长度不超过12
。S
仅由数字和字母组成。
解法思路:回溯算法 从位置0开始, 1、如果位置不是末尾,当遇到数字,直接附加到temp字符串中,继续回溯。当遇到字符,就需要分大小写进行回溯。 2、如果位置是末尾,增加到结果集里
public List<String> letterCasePermutation(String s) {
int position = 0;
String tempStr = "";
List<String> result = new ArrayList<>();
dfs(tempStr, s, result, position);
return result;
}
public void dfs(String tempStr, String s, List<String> result, int position) {
if (position == s.length()) {
result.add(tempStr);
}else {
char c = s.charAt(position);
//如果不是字符,是数字
if(!Character.isLetter(c)){
dfs(tempStr+c,s,result,position+1);//增加到temp临时结果集,增加位置索引继续回溯
}else {
//小写
dfs(tempStr+Character.toLowerCase(c),s,result,position+1);
//大写
dfs(tempStr+Character.toUpperCase(c),s,result,position+1);
}
}
}