내 질문은이 문제와 관련이 있습니다 https://leetcode.com/problems/combination-sum-iii/discuss/ 및 모든 역 추적 문제.backtracking 파이썬 시간 제한에 도달했습니다 (조합 합계) leetcode 함수를 반환 마지막 함수를 반환합니다.
내 질문은 : 왜 내 코드 (다른 사람들의 답변과 정말 비슷합니까?)가 항상 자신보다 더 많은 런타임이 있습니까?
def combinationSum3(self, k, n):
"""
:type k: int how many number
:type n: int how much add to
:rtype: List[List[int]]
"""
res=[]
self.backtrack(k, n, [], res)
newres=[]
for each in res:
newres.append(list(each))
return newres
def backtrack(self, k, n, path, res):
if len(path)> k or sum(path)>n:
return
if len(set(path))==k and sum(path)==n:
if set(path) not in res:
res.append(set(path))
return
for i in range(1, 10):
self.backtrack(k, n, path+[i], res)
다른 사람의 시간 제한을 통과 코드 :
# @param {integer} k
# @param {integer} n
# @return {integer[][]}
def combinationSum3(self, k, n):
if n > sum([i for i in range(1, 11)]):
return []
res = []
self.sum_help(k, n, 1, [], res)
return res
def sum_help(self, k, n, curr, arr, res):
if len(arr) == k:
if sum(arr) == n:
res.append(list(arr))
return
if len(arr) > k or curr > 9:
return
for i in range(curr, 10):
arr.append(i)
self.sum_help(k, n, i + 1, arr, res)
arr.pop()
모든 것을 표시하는 데 시간을 할애 해 주셔서 감사합니다. –
그리고 만약 내가 "for"루프까지 갔다 추적 할 "curr"있다면, 나는 목록을 줄이는 반복되는 요소를 가지지 않을 것이다. –