zoukankan      html  css  js  c++  java
  • 动态规划_leetcode279(动归版)

    #coding=utf-8

    # 递归版
    class Solution1(object):
    def numSquares(self, n):
    """
    :type n: int
    :rtype: int
    """

    return self.squareNum(n)


    def squareNum(self,n):

    if n == 0:
    return 0

    if n == 1:
    return 1

    res = n

    for i in range(1,n):
    if n - i ** 2 >= 0:
    res = min(res, 1 + self.squareNum(n- i ** 2))


    return res

    # s = Solution1()
    #
    # print s.numSquares(13)

    # 记忆化递归
    class Solution2(object):
    def numSquares(self, n):
    """
    :type n: int
    :rtype: int
    """

    self.memo = [-1 for i in range(n+1)]

    return self.squareNum(n)


    def squareNum(self,n):

    if n == 0:
    self.memo[0] = 0
    return 0

    if n == 1:
    self.memo[1] = 1
    return 1

    res = n

    for i in range(1,n):
    if n - i ** 2 >= 0:
    if self.memo[n- i ** 2] != -1:
    res = min(res, 1 + self.memo[n- i ** 2])
    else:
    self.memo[n - i ** 2] = self.squareNum(n - i ** 2)
    res = min(res, 1 + self.memo[n- i ** 2])


    return res

    # s = Solution2()
    #
    # print s.numSquares(40)

    # 动归
    class Solution3(object):
    def numSquares(self, n):

    return self.squareNum(n)

    def squareNum(self, n):

    self.memo = [n for i in range(n + 1)]

    self.memo[0] = 0
    self.memo[1] = 1

    # #memo[2]
    # for i in range(1, 2):
    # if n - i ** 2 >= 0:
    # self.memo[2] = min(self.memo[2],1+self.memo[n - i ** 2])
    #
    #
    # #memo[3]
    # for i in range(1, 3):
    # if n - i ** 2 >= 0:
    # self.memo[3] = min(self.memo[3],1+self.memo[n - i ** 2])



    for i in range(1,n+1):
    for j in range(1,i):
    if i - j ** 2 >= 0:
    self.memo[i] = min(self.memo[i], 1 + self.memo[i - j ** 2])


    return self.memo[n]



    s = Solution3()

    print s.numSquares(7691)
  • 相关阅读:
    ffmpeg学习笔记-ffmpeg在VS下的运用
    ffmpeg学习笔记-初识ffmpeg
    ffmpeg学习笔记-初识ffmpeg
    NDK学习笔记-使用现有so动态库
    新闻cms管理系统(一) ---- thinkphp框架准备
    新闻cms管理系统功能介绍
    ubuntu中phpstorm和sublime快速启动
    ubuntu使用----高效快捷键
    windows下使用docker(一)—— 安装
    windows下更新npm的命令实现
  • 原文地址:https://www.cnblogs.com/lux-ace/p/10546548.html
Copyright © 2011-2022 走看看