题解 | #数组分组#

数组分组

https://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86

def recursive(left: list[int], right: list[int], nums: list[int], pos: int):
    if pos >= len(nums):
        return sum(left) == sum(right)
    cur = nums[pos]
    if cur % 3 == 0 and cur % 5 != 0:
        # 这里选择左边来放3的倍数
        left.append(cur)
        # 使用切片来复制一份 left 和 right 数组
        # 避免回溯时带着上一层调用时的值
        return recursive(left[0:], right[0:], nums, pos + 1)
    elif cur % 5 == 0 and cur % 3 != 0:
        # 这里选择右边来放5的倍数
        right.append(cur)
        return recursive(left[0:], right[0:], nums, pos + 1)
    else:
        # 既不是5的倍数也不是3的倍数
        left.append(cur)
        if not recursive(left[0:], right[0:], nums, pos + 1):
            left.pop()
            right.append(cur)
            return recursive(left[0:], right[0:], nums, pos + 1)
        else:
            return True


_, nums = input(), list(map(int, input().strip().split()))

print("true") if recursive([], [], nums, 0) else print("false")

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务