leetcode-784 字母大小写全排列

在这里插入图片描述

这一题很明显能够想到用dfs,有点像是dfs全排列的弱化版,因为仅仅碰到字母的时候再去抉择。
大概的选择就像是这样:
在这里插入图片描述

可能这题我的重点不是在于dfs的使用。而是在这里面的我学到的一些小技巧。
在判断大小写的时候,可能很多的时候都去使用ASCII码,其实我觉得有时候很麻烦,需要自己去记数字。
参考菜鸟教程
isalnum()表示的是字符串是否包含数字和字母
isalpha()表示的是字符串是否就是字母
isupper()表示的是字符是否为大写字母
islower()表示的是字符是否为小写字母

小技巧二:真的是太有用了
大小写转换虽然使用上面的方法,也很难容易,但是可能需要使用if语句。但是有更加好的办法:对字符进行^32。就可以直接进行转化了。

class Solution {
public:
    //这个就是一个简单的dfs,存在一个回溯的问题
    //就是一个暴力搜索问题
    vector<string> res;
    void dfs(string s,int u){
        //如果枚举到了最后的一位那么直接存储结果
        if(u==s.size()){
            res.push_back(s);
            return;
        }
        //第一种情况是:直接去进行到底
        dfs(s,u+1);
        //并没并没有bfs到底
        
        //isalnum()表示的是字符串是否包含数字和字母
        //isalpha()表示的是字符串是否就是字母
        //isupper()表示的是字符是否为大写字母
        //islower()表示的是字符是否为小写字母
        if(isalpha(s[u])){
            //从大写转化成小写,可以调用函数
            //同样可以通过为位运算
            //大写->小写 s[u]^=32;
            s[u]^=32;
            dfs(s,u+1);//修改后再去搜索下一位

        }
    }
    vector<string> letterCasePermutation(string S) {
        //传入哪些参数呢?
        dfs(S,0);
        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值