【回溯算法】LeetCode的1024活动快速合成1024硬币攻略

游戏规则

用 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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个甜甜的大橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值