【贝壳笔试】算法岗-丢失的卡片-第二题求大佬点拨
我的思路是求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)) 
