题目描述:
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 between 1 and 12.
S will consist only of letters or digits.
题目大意:
- 给定一个字符串,其中包括字母和数字,字母的话,可以改变成大写或者小写,组成新的字符串
- 输出所有的排列方式
解题思路:
- 题中字符串中的数字只是一个幌子,重点其实就是字母,大小写两种方式改变,组成新的字符串
- 有几种组合方式,见下图
- 如图所示,其实组合方式,就是每条路径上的字符组合
- 只要编写一个程序,可以实现对路径的遍历,即可
- 也有人将以上过程称之为“回溯”
少废话,上代码:
class Solution:
def letterCasePermutation(self, S):
# 定义答案空列表
ans = []
def f(S, s, idx):
"""
:param S: 题目所给的字符串
:param s: 自定义的变量,记录路径上的字符变化
:param idx: 索引,每次去找下一个
:return:
"""
# 结束条件
if len(s) == len(S):
ans.append(s)
return
# 遇到的是字母
if S[idx].isalpha():
f(S, s+S[idx].lower(), idx+1)
f(S, s+S[idx].upper(), idx+1)
else:
f(S, s+S[idx], idx+1)
f(S, "", 0)
return ans
运行时间和内存占用:
- Runtime: 60 ms, faster than 59.10% of Python3 online submissions for Letter Case Permutation.
- Memory Usage: 14.8 MB, less than 31.11% of Python3 online submissions for Letter Case Permutation.