Day32
Date: October 30, 2022 12:07 PM
LinkedIn: https://leetcode.cn/problems/letter-case-permutation/description/
Title: 字母大小写全排列
DFS + 位运算
位运算用于大小写字符转换
class Solution:
def letterCasePermutation(self, s: str) -> List[str]:
def dfs(x): # 深度优先遍历
if x >= n: # 遍历到最后一个长度了
res.append(''.join(st)) # 将字符列表st转换为字符串添加进字符串列表res
return
dfs(x + 1) # 原字符
if st[x].isalpha():
st[x] = chr(ord(st[x]) ^ 32)# chr()返回对应的 ASCII 字符 ord是将字符转换为ASCII值
dfs(x + 1)# 转换后的
st = list(s)# 将字符穿转换为列表
n = len(st)
res = [] # 存放结果
dfs(0)
return res
位运算:
-
用于两数交换(减少空间占用)
a = 3 b = 2 if a > b: a = a ^ b b = a ^ b a = a ^ b print(a) print(b)
-
两个数字判等
- a ^ b == 0 #与a == b一个意思
-
对字母大小写的转换
c = c ^ 32;
利用异或运算将字母大小写互换,即大写转小写,小写转大写- 具体原理请参考(11条消息) 位运算对字母大小写的转换_&不逝的博客-CSDN博客_位运算大小写转换