动态规划_leetcode279(经典栈板)

#coding=utf-8
#点评:
#递归思想加层次遍历,很经典的解题模板思想 20181220



class Solution(object):
def numSquares(self, n):
"""
:type n: int
:rtype: int
"""

pair = (n,0)
queue = []
queue.append(pair)

while queue:
curPair = queue.pop(0)
num = curPair[0]
step = curPair[1]

if num == 0:
return step

for i in range(1,num+1):
if num - i *i >= 0:
nextPair = (num-i*i,step+1)
queue.append(nextPair)
else:
break

class Solution2(object):
def numSquares(self, n):
"""
:type n: int
:rtype: int
"""
pair = (n, 0)
queue = []
queue.append(pair)

#matrix = [[0 for i in range(3)] for i in range(3)]
visit = [0 for i in range(n+1)]
visit[n] = 1

while queue:
curPair = queue.pop(0)
num = curPair[0]
step = curPair[1]

if num == 0:
return step


for i in range(1, num + 1):
nextNum = num - i*i
if nextNum >= 0:
if visit[nextNum] == 0:
nextPair = (nextNum, step + 1)
queue.append(nextPair)
visit[nextNum] = 1
else:
break


class Solution3(object):
def numSquares(self, n):
"""
:type n: int
:rtype: int
"""
pair = (n, 0)
queue = []
queue.append(pair)

#matrix = [[0 for i in range(3)] for i in range(3)]
visit = [0 for i in range(n+1)]
visit[n] = 1

while queue:
curPair = queue.pop(0)
num = curPair[0]
step = curPair[1]

if num == 0:
return step


for i in range(1, num + 1):
nextNum = num - i*i
if nextNum >= 0:
if visit[nextNum] == 0:

if nextNum == 0:
return step+1

nextPair = (nextNum, step + 1)
queue.append(nextPair)
visit[nextNum] = 1
else:
break


s = Solution2()

print s.numSquares(13)

转载于:https://www.cnblogs.com/lux-ace/p/10546545.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值