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.
Examples: Input: S = "a1b2" Output: ["a1b2", "a1B2", "A1b2", "A1B2"] Input: S = "3z4" Output: ["3z4", "3Z4"] Input: S = "12345" Output: ["12345"]
Note:
S will be a string with length at most12 .S will consist only of letters or digits.
想法如下
- 看到排列組合,第一個直覺是用 dfs 來解
- 首先,先一路一直走到底。然後回頭的時候,檢查當下的字元是數字還是字母,是字母的話,根據他的大小寫,再做 dfs 下去
code 如下
Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
private List<String> ans; | |
public List<String> letterCasePermutation(String S) { | |
ans = new ArrayList<>(); | |
final int len = S.length(); | |
permutation("", S, 0, len); | |
return ans; | |
} | |
private void permutation(String output, final String s, final int index, final int len) { | |
if(index == len) { | |
ans.add(output); | |
return; | |
} | |
final char c = s.charAt(index); | |
permutation(output + c, s, index+1, len); | |
if(Character.isLetter(c)) { | |
permutation(output + (Character.isUpperCase(c) ? Character.toLowerCase(c) : Character.toUpperCase(c)), s, index+1, len); | |
} | |
} | |
} |
沒有留言:
張貼留言