【贝壳笔试】算法岗-丢失的卡片-第二题求大佬点拨
我的思路是求1-n之间的每个可能的数字list与输入的做比较,如果小于则继续加,大于说明遇到可能的候选,跳出比较,求出缺少的每个数字,然后求全排列。
但是只能过10%,求大佬点拨
def listSum(nums): # 将list映射为一个各个数字出现的总和 sum = 0 for i in range(1,11): sum += i*nums[i-1] return sum def permute(nums): # 求list里数字全排列 def dfs(nums, stack): if not nums: res.append(stack) for i ,num in enumerate(nums): dfs(nums[:i]+nums[i+1:],stack+[num]) res = [] dfs(nums,[]) return res if __name__ == '__main__': T = input() inputNums = list(map(int,(T).split(' '))) candidateNums = [] # 初始化 for i in range(0,10): candidateNums.append(0) num = 1 while(True): n = num while(num!=0): remainder = num%10 candidateNums[remainder] += 1 num = num//10 candidateSum = listSum(candidateNums) inputSum = listSum(inputNums) if candidateSum < inputSum: num = n+1 else: break numCandidates = [] for i in range(0,10): if(candidateNums[i] != inputNums[i]): numCandidates.append(i) resultCandidates = permute(numCandidates) result = [] for i in resultCandidates: strCandidate = "" for j in i: strCandidate += str(j) result.append(strCandidate) sorted(result) if len(result) == 0: print("NO ANSWER") else: for i in result: print(n,int(i))