代码改变世界

[LeetCode] 784. Letter Case Permutation_Medium tag: backtracking

2021-06-06 09:36  Johnson_强生仔仔  阅读(32)  评论(0编辑  收藏  举报

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"]

 

Constraints:

  • s will be a string with length between 1 and 12.
  • s will consist only of letters or digits.

 

Ideas:

DFS 的backtracking    T: O(2^n) worst      S: O(n)

 

Code

class Solution:
    def letterCasePermutation(self, s):
        ans = []
        def helper(ans, temp, s, pos):
            if len(temp) == len(s):
                ans.append(temp)
            else:
                if s[pos].isdigit():
                    helper(ans, temp + s[pos], s, pos + 1)
                else:
                    helper(ans, temp + s[pos].lower(), s, pos + 1)
                    helper(ans, temp + s[pos].upper(), s, pos + 1)
        helper(ans, "", s, 0)
        return ans