2018年6月17日 星期日

[LeetCode] 784. Letter Case Permutation

轉自LeetCode

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 most 12.
  • S will consist only of letters or digits.
<Solution>

想法如下
  • 看到排列組合,第一個直覺是用 dfs 來解
  • 首先,先一路一直走到底。然後回頭的時候,檢查當下的字元是數字還是字母,是字母的話,根據他的大小寫,再做 dfs 下去
code 如下

Java
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);
}
}
}

沒有留言:

張貼留言