描述
给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。
分析
递归解法,一个字母有两种可能,n个字母就有2^n个可能。
- 注意正确使用StringBuffer的修改某个位置的字符的方法
- 一般整型可以默认转成字符类型,但是涉及到运算需要将运算后的结果转成字符类型才可以给字符变量赋值。
class Solution {
List<String> ans;
public List<String> letterCasePermutation(String s) {
ans = new ArrayList<>();
StringBuffer sb = new StringBuffer(s);
for(int i = 0; i < sb.length(); i++){
char ch = sb.charAt(i);
if(ch >= 'A' && ch <= 'Z'){
sb.setCharAt(i,(char)(ch + 32));
}
}
int step = sb.length();
for(int i = 0; i < sb.length(); i++){
char ch = sb.charAt(i);
if(ch >= 'a' && ch <= 'z'){
step = i;
break;
}
}
dfs(sb,step);
return ans;
}
public void dfs(StringBuffer sb, int step){
if(step == sb.length()){
ans.add(sb.toString());
return;
}
int i = step+1;
for(; i < sb.length(); i++){
char ch = sb.charAt(i);
if(ch <= 'z' && ch >= 'a'){
break;
}
}
dfs(sb,i);
StringBuffer sb2 = new StringBuffer(sb);
sb2.setCharAt(step,(char)(sb2.charAt(step) - 32));
dfs(sb2,i);
}
}