给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。
示例:
输入:S = “a1b2”
输出:[“a1b2”, “a1B2”, “A1b2”, “A1B2”]
输入:S = “3z4”
输出:[“3z4”, “3Z4”]
输入:S = “12345”
输出:[“12345”]
提示:
S 的长度不超过12。
S 仅由数字和字母组成。
一定要记得char和int的转换,强制转换回去
class Solution {
char[] ch;
List<String> ans=new ArrayList<>();
public List<String> letterCasePermutation(String S) {
ch=S.toCharArray();
backtrack(0);
return ans;
}
public void backtrack(int index){
if(index==ch.length){
ans.add(new String(ch));//
return ;//这里一定要返回return;
}
if(ch[index]>='0' && ch[index]<='9') backtrack(index+1);//如果是数字不管,进入下一层
else {//如果是字母
if(ch[index]>='a' && ch[index]<='z'){//小写字母
ch[index]=(char)(ch[index]+'A'-'a');//注意这里一定要记得转换
backtrack(index+1);
ch[index]=(char)(ch[index]+'a'-'A');
backtrack(index+1);
}
else {//大写字母
ch[index]=(char)(ch[index]+'a'-'A');
backtrack(index+1);
ch[index]=(char)(ch[index]+'A'-'a');
backtrack(index+1);
}
}
}
}
import java.util.ArrayList;
import java.util.List;
class Solution {
List<String> res = new ArrayList();
int dis = 'A'-'a';
public List<String> letterCasePermutation(String S) {
if(S.length()==0){return res;}
char[] cs = S.toCharArray();
helper(cs,0);
return res;
}
public void helper(char[] cs,int idx){
res.add(String.valueOf(cs));
for(int i=idx;i<cs.length;i++){
if(cs[i]>='0'&&cs[i]<='9'){
continue;
}else if(cs[i]>='a'&&cs[i]<='z'){
cs[i] = (char)(cs[i] + dis);
helper(cs,i+1);
cs[i] = (char)(cs[i] - dis);
}else{
cs[i] = (char)(cs[i] - dis);
helper(cs,i+1);
cs[i] = (char)(cs[i] + dis);
}
}
}
}