題目地址:https://leetcode.com/problems/letter-case-permutation/description/
大意:返回一個(gè)列表,列表中列舉所有給定字符串中字母所有大小寫的情況
思路1:普通的循環(huán)添加
class Solution:
def letterCasePermutation(self, S):
"""
:type S: str
:rtype: List[str]
"""
rlist = [S]
for i,item in enumerate(S):
if not item.isalpha():
continue
l_new = []
for strings in rlist:
swap_str = (strings[:i] + strings[i].swapcase() + strings[i + 1:])
print(swap_str)
l_new.append(swap_str)
rlist.extend(l_new)
return rlist
思路2:DFS算法(參考花花醬的解題思路)

DFS流程圖
我們發(fā)現(xiàn),這個(gè)二叉樹的深度就是字符串的長度。
class Solution:
def letterCasePermutation(self, S):
ans = []
def dfs(S, i, n):
if i == n:
ans.append(''.join(S))
return
dfs(S, i + 1, n)
if not S[i].isalpha(): return
S[i] = S[i].swapcase()
dfs(S, i + 1, n)
S[i] = S[i].swapcase()
dfs(list(S), 0, len(S))
return ans