784. Letter Case Permutation

Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string.

Return a list of all possible strings we could create. You can return the output in any order.

Example 1:

Input: S = "a1b2"
Output: ["a1b2","a1B2","A1b2","A1B2"]

Example 2:

Input: S = "3z4"
Output: ["3z4","3Z4"]

Example 3:

Input: S = "12345"
Output: ["12345"]

Example 4:

Input: S = "0"
Output: ["0"]
class Solution {
    public List<String> letterCasePermutation(String S) {
        Queue<String> q = new LinkedList();
        q.offer(S);
        
        for(int i = 0; i < S.length(); i++) {
            if(Character.isDigit(S.charAt(i))) continue;
            int size = q.size();
            
            for(int j = 0; j < size; j++) {
                char[] ch = q.poll().toCharArray();
                ch[i] = Character.toLowerCase(ch[i]);
                q.offer(new String(ch));
                
                ch[i] = Character.toUpperCase(ch[i]);
                q.offer(new String(ch));
            }
        }
        return new LinkedList(q);
    }
}

A typical BFS, wtf am i doin?

对每一位判断

class Solution {
    public List<String> letterCasePermutation(String S) {
        List<String> res = new ArrayList();
        if(S.length() == 0 || S == null) return res;
        help(res, 0, S.toCharArray());
        return res;
    }
    
    public void help(List<String> res, int start, char[] ch) {
        if(start == ch.length) {
            res.add(new String(ch));
            return;
        }
        
        if(ch[start] >= '0' && ch[start] <= '9') {
            help(res, start + 1, ch);
            return;
        }
        
        ch[start] = Character.toUpperCase(ch[start]);
        help(res, start + 1, ch);
        
        ch[start] = Character.toLowerCase(ch[start]);
        help(res, start + 1, ch);
    }
}
原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13606371.html