问题
你有L,一个包含一些数字(0到9)的列表。写一个函数解(L),它找出可以由这些数字中的一些或所有数字组成的最大数,并且可以被3整除。
如果不可能生成这样的数字,则返回0作为解决方案。L将包含1到9位之间的任意数字。相同的数字可能在列表中出现多次,但列表中的每个元素只能使用一次。
测试用例
输入: solution.solution(3,1,4,1)输出: 4311
输入: solution.solution(3,1,4,1,5,9)输出: 94311
我的代码
def sum(L):
totalSum = 0
for x in range(len(L)):
totalSum = totalSum + L[x]
return totalSum
def listToInteger(L):
strings = [str(integer) for integer in L ]
concatString = "".join(strings)
finalInt = int(concatString)
return finalInt
def solution(L):
num = sum(L)
if not num % 3:
L.sort(reverse=True) # sort list in descending order to create largest number
return listToInteger(L)
else:
n = num % 3
flag = False
while not flag: # locate digit causing indivisiblity
if n in L:
L.remove(n)
L.sort(reverse=True)
return listToInteger(L)
elif(n > num):
return 0
else:
n += 3
我得到了两个正确的测试用例,但是有一个隐藏的用例总是失败。我不确定输入是否不够严格,或者我的逻辑中是否有错误
所以它会检查列表中的1,4,7,10,13,16,但它不会在列表中,所以它不会删除8或5,它会返回0,而实际上它应该返回3。
我为此添加了一个函数,但即使这样,它仍然无法通过隐藏的测试用例。。。
如有任何建议,我们将不胜感激
发布于 2020-09-13 02:12:59
您的代码似乎假设只有一个数字是错误的。你会怎么处理像1,1,3
这样的输入呢?sum为5,n为2,您将尝试删除2,5,然后失败并返回0。
你需要改变你的假设,并检查其他数字,并使其有可能在工作时删除超过1个数字的解决方案。
发布于 2020-09-13 02:20:19
这段代码在8,5,3环境下运行良好
示例: 8,5,3,6
sum将是22
总和%3将为1
因此,需要签入列表以删除的数字是1,4 7,10,13,16,19,22,它永远不会删除任何元素,因为列表中没有这些元素
所以仍然有6和3,它们可以是3的倍数。
所以将3和6放在一个列表中,并对它们进行排序,结果将是63
def sum(L):
totalSum = 0
for x in range(len(L)):
totalSum = totalSum + L[x]
return totalSum
def listToInteger(L):
strings = [str(integer) for integer in L ]
concatString = "".join(strings)
finalInt = int(concatString)
return finalInt
def solution(L):
num = sum(L)
if not num % 3:
L.sort(reverse=True) # sort list in descending order to create largest number
return listToInteger(L)
else:
n = num % 3
flag = False
while not flag: # locate digit causing indivisiblity
if n in L:
L.remove(n)
L.sort(reverse=True)
return listToInteger(L)
elif(n > num):
k=[]
for i in L:
if i%3==0:
k.append(i)
if len(k)!=0:
k.sort(reverse=True)
return listToInteger(k)
else:
return 0
else:
n += 3
l=[8,5,3]
print(solution(l))
https://stackoverflow.com/questions/63866009
复制