题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

#参考大佬穷举的代码,做了优化,只选取不重复的两个数进行递归
def dfs(nums):
    if not nums:
        return False
    if len(nums) == 1:
        return abs(nums[0] - 24) < 1e-6
    for i in range(0,len(nums)):                   # 获取第一个数字
        for j in range(i+1,len(nums)):               # 获取第二个数字                            # 控制不重复
            newNums = list()
            for k in range(len(nums)):       # 获取第三个数字
                if k != i and k != j:
                    newNums.append(nums[k])
            for k in range(4):
                if k < 2 and i > j:            # 对于+和*操作来说不需要考虑两者的顺序,因此舍去一种
                    continue
                if k == 0:
                    newNums.append(nums[i]+nums[j])
                if k == 1:
                    newNums.append(nums[i]*nums[j])
                if k == 2:
                    newNums.append(nums[i]-nums[j])
                if k == 3:
                    if abs(nums[j]) < 1e-6:          # 排除除数为0的情况
                        continue
                    newNums.append(nums[i]/nums[j])
                if dfs(newNums):
                    return True
                newNums.pop()
    return False

while True:
    try:
        lst = [int(x) for x in input().split()]
        if dfs(lst):
            print('true')
        else:
            print('false')
    except:
        break;


全部评论
我感觉这个才是对的,因为这样正序递归才能考虑括号的存在,其余倒序递归遍历的没有考虑到括号前有负号的情况,具体可以参考HJ89
点赞 回复 分享
发布于 2022-11-27 10:48 陕西

相关推荐

无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
2 4 评论
分享
牛客网
牛客企业服务