话不多说
直接上代码
#coding=utf-8
#author="HL"
class Node():
def __init__(self,cakes,level,steps):
self.cakes = cakes
self.level = level
self.steps = steps
class Solution():
def __init__(self,nums):
self.toplevel = 2*len(nums)-1
self.stack = [Node(nums,0,[])]
def isSorted(self,nums):
for i in range(len(nums)-1):
if nums[i]>nums[i+1]:
return False
return True
'''
最小步骤预测
'''
def low_predict(self, cakes):
number = 0
for i in range(len(cakes) - 1):
if abs(cakes[i] - cakes[i + 1])!=1:
number += 1
return number
'''
解决方案
'''
def solve(self):
while self.stack:
first = self.stack.pop()
cakes = first.cakes
if self.isSorted(cakes):
print "翻转次数为:%d"%first.level,"翻转步骤为:",first.steps
if first.level<self.toplevel:
self.toplevel = first.level
else:
low_level = self.low_predict(cakes)
if first.level+low_level<self.toplevel:
for i in range(1,len(cakes)):
left = cakes[:i+1]
right = cakes[i+1:]
nowcakes = left[::-1]+right
if not first.steps or first.steps[-1]!=i:
newnode = Node(nowcakes,first.level+1,first.steps+[i])
self.stack.append(newnode)
'''
程序调用
'''
zz = Solution([3,2,1,6,5,4,9,8,7,0])
print zz.solve()