leetcode 784 字母大小写全排列

给定一个字符串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);
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值