216 组合总和|||
和昨天的题思路一致
class Solution:
def combinationSum3(self, k: int, n: int) -> List[List[int]]:
self.record = []
self.temp = []
self.backTrack(k,n,1)
return self.record
def backTrack(self,k,n,startIndex):
if sum(self.temp) == n and len(self.temp) == k:
self.record.append(self.temp.copy())
for i in range(startIndex,10):
self.temp.append(i)
self.backTrack(k,n,i+1)
self.temp.pop()
看了一下解答,我并没有维护sum,直接在判断中,而且比没有设置返回,为什么可以返回呢?
这里for循环执行完毕会自动返回的,没有return也会返回,但是在if下面添加返回条件可以剪枝,避免无效的迭代,测试了一下确实如此
那么不维护sum有影响吗?维护一个sum可以减少求和的运算,降低计算复杂度
17 电话号码的字母组合
用上一题的思路写了一半发现好像迭代法更直接一些?写个字典,不对,这样还是无法确定迭代层数。。
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
if len(digits) == 0: return []
self.temp = []
self.record = []
self.nums = [int(x) for x in digits]
self.nums.append(1)
self.dict = {2:'abc',3:'def',4:'ghi',5:'jkl',6:'mno',7:'pqrs',8:'tuv',9:'wxyz'}
self.backTrack(0)
return self.record
def backTrack(self,startIndex):
if self.nums[startIndex] == 1:
self.record.append(''.join(self.temp))
return
for i in self.dict.get(self.nums[startIndex]):
self.temp.append(i)
self.backTrack(startIndex+1)
self.temp.pop()
遍历的不是数字,因为顺序实际上是确定不变的,遍历的是每个数字对应的字母