Leetcde - 784 字母大小写全排列

C++字母数字函数总结
isalnum(char c) 判断是否为字母或者数字
isalpha(char c) 判断是否为字母
isdigit(char c) 判断是否为数字
islower(char c) 判断是否为小写字母
isupper(char c) 判断是否为大写字母
toupper(char c) 字母小写转大写
tolower(char c) 字母大写转小写

S[index]^32
ASCII码表
A 1000001    a 1100001
B 1000010    b 1100010
C 1000011    c 1100011
...
Z 1011010    z 1111010

32是0100000,这是小写和大写字母之间的唯一区别.因此,切换该位会切换字母的大小写.

class Solution {
public:

vector<string> result;
string ans;

    vector<string> letterCasePermutation(string S) {
        int n=S.size();
        backtrack(S,0);
        return  result;
    }

    void backtrack(string& S,int index){
        if(S.size()==ans.size()){
            result.push_back(ans);
            return;
        }
        ans.push_back(S[index]);
        backtrack(S,index+1);
        ans.pop_back();
        if(isalpha(S[index])){//判断是否是字母
            ans.push_back(S[index]^32);//大小写互相转换
            backtrack(S,index+1);
            ans.pop_back();
        }
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值