784. 字母大小写全排列

字母大小写全排列

描述 :

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

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

回文串 是正着读和反着读都一样的字符串。

题目 :

LeetCode 784. 字母大小写全排列 :

784. 字母大小写全排列

784. 字母大小写全排列_第1张图片

分析 :

如果本题去掉数字,只告诉你两个字母ab,让你每个字母变化大小写,那就是ab、Ab、aB、AB四种情况,题目比电话号码问题还简单,这里的数字就是干扰项,我们需要做的是过滤掉数字,只处理字母。另外还要添加个大小写转换的问题。如下图所示:

784. 字母大小写全排列_第2张图片

由于每个字符的大小写形式刚好差了32,因此在大小写装换时可以用c32 来进行转换和恢复 .

解析 : 

class Solution {
    List list = new ArrayList<>();
    public List letterCasePermutation(String s) {
        char[] arr = s.toCharArray();
        dfs(arr,0);
        return list;
    }
    public void dfs(char[] arr,int start){
        while(start < arr.length && Character.isDigit(arr[start])){
            start++;
        }
        if(start == arr.length){
            list.add(new String(arr));
            return;
        }
        arr[start] ^= 32;
        dfs(arr,start + 1);
        arr[start] ^= 32;
        dfs(arr,start + 1);
    }
}

你可能感兴趣的:(深度优先,算法,数据结构,leetcode,java)