思路:使用回溯,用一个StringBuffer来存储每一位元素,对于每个字母,先考虑放它的大写形式,再考虑放它的另一种小写形式。
代码:
class Solution {
List<String> res = new ArrayList<String>();
public List<String> letterCasePermutation(String s) {
StringBuffer sb = new StringBuffer();
char[] cs = s.toCharArray();
backtrack(cs, sb, 0);
return res;
}
public void backtrack(char[] cs, StringBuffer sb, int idx){
if(sb.length() == cs.length){
res.add(sb.toString());
return ;
}
for(int i=idx;i<cs.length;i++){
if(Character.isDigit(cs[i])){
sb.append(cs[i]);
backtrack(cs, sb, i+1);
sb.setLength(sb.length() - 1);
}
else{
sb.append(Character.toUpperCase(cs[i]));
backtrack(cs, sb, i+1);
sb.setLength(sb.length() - 1);
sb.append(Character.toLowerCase(cs[i]));
backtrack(cs, sb, i+1);
sb.setLength(sb.length() - 1);
}
}
}
}
注意:
String转换成char[] (s.toCharArray())
StringBuffer转换成String类型 (sb.toString())
对字符进行的一系列操作
(Character.isDigit(cs[i])、Character.toUpperCase(cs[i])、Character.toUpperLowerCase(cs[i]))
StringBuffer删除最后一个字符的操作(sb.setLength(sb.length() - 1))