【回溯&&dfs】leet 784. 字母大小写全排列

给定一个字符串 s ,通过将字符串 s 中的每个字母转变大小写,我们可以获得一个新的字符串。

返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。

示例 1:

输入:s = "a1b2"
输出:["a1b2", "a1B2", "A1b2", "A1B2"]

示例 2:

输入: s = "3z4"
输出: ["3z4","3Z4"]

提示:

  • 1 <= s.length <= 12
  • s 由小写英文字母、大写英文字母和数字组成

代码:

       public List<String> letterCasePermutation(String s) {
            List<String> ans=new ArrayList<>();
            dfs(s.toCharArray(),0,new StringBuilder(),ans);
            return ans;
        }

        private void dfs(char[] cs,int start,StringBuilder sb,List<String> ans){
            if(start==cs.length){
                ans.add(sb.toString());
                return;
            }

            if(Character.isDigit(cs[start])){
                sb.append(cs[start]);
                dfs(cs,start+1,sb,ans);
            }else{
                int slen=sb.length();
                sb.append(Character.toLowerCase(cs[start]));
                dfs(cs,start+1,sb,ans);
                sb.setLength(slen);

                sb.append(Character.toUpperCase(cs[start]));
                dfs(cs,start+1,sb,ans);
                sb.setLength(slen);
            }
        }
算法笔试题解-回溯系列 文章被收录于专栏

算法笔试题解-回溯系列

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务