ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LeetCode 784 字母大小写全排列

2021-12-06 19:05:02  阅读:186  来源: 互联网

标签:784 bfs len char depth 大小写 path array LeetCode


784.字母大小写全排列 力扣

image-20211206181516575

原题链接

我的结果

image-20211206181632386

求解思路

  • 这也是一个典型的回溯问题,dfs就可以解决。

  • 之前做过dfs的类型题,大体思路一样,重在细节,和编程的灵活性

  • 由于遍历的元素是基本类型,所以path(搜索路径)用char[]表示,这样不涉及入栈出栈了,遍历完不用考虑更新,直接在原来数组上赋值即可

  • 对比之前的题里for循环里嵌套递龟函数,这道题每层只有两个选择,且大小不变,故可以不用for来处理,写两个条件,这两个条件顺序执行,每个条件里放入递龟函数。

    ///原来的框架
    bfs( ){
        //终止条件
        if(){ return; }
        
        for( ){
            bfs( )     
        }
    }
    ///这道题完全可以这样
    bfs(){
        //终止条件
        if(){}
    
        //统统写成大写   
        bfs();
       //统统写成小写     
        bfs();
    }
    

代码

class Solution {
    List<String> ans = new ArrayList<>();
    int dis = 'a'-'A';
    public List<String> letterCasePermutation(String s) {
        
        char[] path = new char[s.length()];
        char[] array = s.toCharArray();
        int len = array.length;
        dfs(0,array,len,path);
        return ans;
    }

    void dfs(int depth, char[] array,int len,char[] path){
        //是数字就往前,但是要注意++操作会让数组越界
    while(depth!=len&&array[depth]<='9'&&array[depth]>='0'){path[depth] = array[depth];depth++;}
       //循环终止条件
        if(depth==len){ans.add(new String(path));return;}
        
        //统统变成大写
        if(array[depth]>='A'&&array[depth]<='Z'){path[depth]=array[depth];}
        else{path[depth] = (char)(array[depth]-dis);}           
            dfs(depth+1,array,len,path);
        
        //统统变成小写
        if(array[depth]>='a'&&array[depth]<='z'){path[depth]=array[depth];}
        else{path[depth] = (char)(array[depth]+dis);}
            dfs(depth+1,array,len,path);
        

    }
}

我太马虎了,一开始总出现"!",断电调试了半天后来发现是+dis -dis搞反了,下回一定要认真!!!

认真,认真,再认真!

程序逻辑错误还得需要 断点调试,断电调试太香了!!!

标签:784,bfs,len,char,depth,大小写,path,array,LeetCode
来源: https://www.cnblogs.com/Rogy/p/15651350.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有