游戏规则
用 7 张牌进行 3 次运算,其中每次运算需使用 2 张 数字牌 和 1 张 运算符号牌 ;
每次运算后都将根据上一次的运算结果生成一张数字牌。最后一次运算结果刚好等于 1024 时记为「成功」。
游戏分析
本菜决定用一个回溯算法得到数字和运算符的排列。
得到数字1,2,3,4,和运算符a,b,c
然后计算(((1a2)b3)c4)
,如果等于1024则返回该运算公式。
代码实现
# 回溯算法求数组索引全排列
def index_permutation(nums,path,end,res):
if len(path) == end:
res.append(path)
return
for index in range(0,len(nums)):
if str(index) in path:
continue
path+=str(index)
index_permutation(nums, path, end,res)
path=path[:-1]
def cal_1024(nums,symbols):
res = []
index_permutation(nums,'',4,res)
n_lists = res
res = []
index_permutation(symbols,'',3,res)
s_lists = res
for n_path in n_lists:
for s_path in s_lists:
res = '((('+str(nums[int(n_path[0])])+symbols[int(s_path[0])]\
+str(nums[int(n_path[1])])+')'+symbols[int(s_path[1])]\
+str(nums[int(n_path[2])])+')'+symbols[int(s_path[2])]\
+str(nums[int(n_path[3])])+')'
if eval(res) == 1024:
print (res)
nums = [35,1024,1024,0,6,25,21,5]
symbols = ['^','+','<<']
cal_1024(nums,symbols)
作者:大橙子
链接:https://leetcode.cn/circle/article/TpYmeQ/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。