24点游戏--python
2017-12-29 22:50
316 查看
leetcode 679 题
虽然写的超时了,但是答案都是准确的,超市是因为用了递归以及把所有情况都遍历了,也不想改了
思路就是构造后续表达式,先找出4个数的全排列,再构造表达式的全组合,然后构造后续表达式,这里应用了递归
可以做的优化:很多情况都是重复的,以及三个数的结果是0或者负数也可以直接排除,但本身的复杂度也不是很高
class Solution(object):
def judgePoint24(self, nums):
def get_result(order):
numbers = []
result = 0
for word in order:
if ord(word) > ord('0') and ord(word) <= ord('9'):
numbers.append(float(ord(word) - ord('0')))
else:
if word=='+':
n2 = numbers.pop(-1)
n1 = numbers.pop(-1)
numbers.append(n1 + n2)
if word == '-':
n2 = numbers.pop(-1)
n1 = numbers.pop(-1)
numbers.append(n1 - n2)
if word == '*':
n2 = numbers.pop(-1)
n1 = numbers.pop(-1)
numbers.append(n1 * n2)
if word == '/':
n2 = numbers.pop(-1)
n1 = numbers.pop(-1)
if n2 == 0:
return 0
else:
numbers.append(n1 / n2)
return int(numbers[0])
def get_symbol():
symbol_order = []
symbol=['+','-','*','/']
for s1 in symbol:
for s2 in symbol:
for s3 in symbol:
symbol_order.append([s1,s2,s3])
return symbol_order
def get_order():
the_order=[[]]
for i in range(len(nums)):
l_order=[]
for the in the_order:
for j in range(len(nums)):
if j not in the:
t=the[:]
t.append(j)
l_order.append(t)
the_order=l_order
return the_order
def fd(expresion,number_num,symbol_number,number,symbol):
if symbol_number!=3:
if (number_num - symbol_number)>1:
n_expression = expresion[:]
n_expression.append(symbol[symbol_number])
fd(n_expression, number_num, symbol_number + 1, number,
symbol)
if number_num < 4:
n_expression = expresion[:]
n_expression.append(str(number[number_num]))
fd(n_expression, number_num + 1, symbol_number, number,
symbol)
else:
#print expresion
#print get_result(expresion)
if get_result(expresion)==24:
flag[0]=1
def computer():
symbol=get_symbol()
order=get_order()
num_order=[]
for o in order:
num_order.append([nums[x] for x in o])
for o in num_order:
for s in symbol:
fd([],0,0,o,s)
order = ['0', '0', '+', '0', '+', '0', '+']
flag=[0]
computer()
if flag[0]==0:
return False
else:
return True
虽然写的超时了,但是答案都是准确的,超市是因为用了递归以及把所有情况都遍历了,也不想改了
思路就是构造后续表达式,先找出4个数的全排列,再构造表达式的全组合,然后构造后续表达式,这里应用了递归
可以做的优化:很多情况都是重复的,以及三个数的结果是0或者负数也可以直接排除,但本身的复杂度也不是很高
class Solution(object):
def judgePoint24(self, nums):
def get_result(order):
numbers = []
result = 0
for word in order:
if ord(word) > ord('0') and ord(word) <= ord('9'):
numbers.append(float(ord(word) - ord('0')))
else:
if word=='+':
n2 = numbers.pop(-1)
n1 = numbers.pop(-1)
numbers.append(n1 + n2)
if word == '-':
n2 = numbers.pop(-1)
n1 = numbers.pop(-1)
numbers.append(n1 - n2)
if word == '*':
n2 = numbers.pop(-1)
n1 = numbers.pop(-1)
numbers.append(n1 * n2)
if word == '/':
n2 = numbers.pop(-1)
n1 = numbers.pop(-1)
if n2 == 0:
return 0
else:
numbers.append(n1 / n2)
return int(numbers[0])
def get_symbol():
symbol_order = []
symbol=['+','-','*','/']
for s1 in symbol:
for s2 in symbol:
for s3 in symbol:
symbol_order.append([s1,s2,s3])
return symbol_order
def get_order():
the_order=[[]]
for i in range(len(nums)):
l_order=[]
for the in the_order:
for j in range(len(nums)):
if j not in the:
t=the[:]
t.append(j)
l_order.append(t)
the_order=l_order
return the_order
def fd(expresion,number_num,symbol_number,number,symbol):
if symbol_number!=3:
if (number_num - symbol_number)>1:
n_expression = expresion[:]
n_expression.append(symbol[symbol_number])
fd(n_expression, number_num, symbol_number + 1, number,
symbol)
if number_num < 4:
n_expression = expresion[:]
n_expression.append(str(number[number_num]))
fd(n_expression, number_num + 1, symbol_number, number,
symbol)
else:
#print expresion
#print get_result(expresion)
if get_result(expresion)==24:
flag[0]=1
def computer():
symbol=get_symbol()
order=get_order()
num_order=[]
for o in order:
num_order.append([nums[x] for x in o])
for o in num_order:
for s in symbol:
fd([],0,0,o,s)
order = ['0', '0', '+', '0', '+', '0', '+']
flag=[0]
computer()
if flag[0]==0:
return False
else:
return True
相关文章推荐
- Python实现24点游戏
- 经典趣味24点游戏程序设计(python)
- python-24点智取游戏
- 笨方法学Python练习43:你来制作一个游戏
- 一步步解析Python斗牛游戏的概率
- 用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
- python编写弹球游戏的实现代码
- 青少年如何使用 Python 开始游戏开发
- python函数(模拟算数游戏)
- Python游戏:PyGame
- python基础教程之实现石头剪刀布游戏示例
- python实例-兔子和獾(塔防游戏)附源码
- python编写弹球游戏的实现代码
- 【24点游戏】cocos2dx 源码
- 使用 Python 和 Asyncio 编写在线多用人游戏(二)
- Java编写的24点纸牌游戏
- Python基于pygame实现的font游戏字体(附源码)
- Hangman游戏源代码 --- python实现
- 用python爬取游戏图片
- Python视频教程(入门语法、游戏开发、网络编程)