Google Foobar请通过编码消息测试用例失败

2024-04-18 08:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:

你有L,一个包含一些数字(0到9)的列表。写一个函数解(L),它可以从这些数字中的一些或所有数字中找出可以被3整除的最大数

如果无法生成这样的数字,请返回0作为解决方案。L将包含1到9位数字。同一数字可能在列表中出现多次,但列表中的每个元素只能使用一次

测试用例

输入: 解决方案。解决方案([3,1,4,1]) 输出: 4311

输入: 解决方案。解决方案([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

我得到了两个正确的测试用例,但是有一个隐藏的用例一直失败。我不确定输入是否不够严格,或者我的逻辑是否有错误

我能想到的逻辑中唯一的错误是,如果输入是[8,5,3],那么总和是16,16%3=1

所以它会检查列表中的1,4,7,10,13,16,但它不在列表中,所以它不会删除8或5。它将在实际返回[3]时返回0

我为此添加了一个函数,但即使如此,它仍然未能通过隐藏的测试用例

如有任何建议,将不胜感激


Tags: 函数in列表forreturndef测试用例数字
2条回答

您的代码似乎假定只有一个数字是错误的。您将如何处理像1,1,3这样的输入?求和为5,n为2,您将尝试删除2,5,然后失败并返回0

您需要更改您的假设并检查其他数字,并且在制定解决方案时可以删除1个以上的数字

此代码在[8,5,3]中运行良好

示例:[8,5,3,6]

总数是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))

相关问题 更多 >