❤leetcode,python2❤动态规划的题-答案

96 阅读1分钟

1.爬楼梯

假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?

思考:
登上第1层:1种
登上第2层:2种
登上第3层:1+2=3种
登上第4层:2+3=5种
登上第5层:3+5=8种
登上第6层:5+8=13种
每一阶梯可以从第1级迈上来,或者从第2级迈上来
每一阶梯的方法,都是之前俩节方法的总和。所以这个就很简单了

class Solution(object):
    def climbStairs(self, n):
        """
        :type n: int
        :rtype: int
        """
        a=1
        b=1
        s=0
        if n==1 or n==0:
            return 1
        for i in range(2,n+1):
            s=a+b
            a=b
            b=s
        return s

2.打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        queding = 0
        changshi = 0

        for i in nums:
            if queding+i > changshi: #果断舍弃之前的changshi
                temp = changshi #保险起见,先把changshi存起来给queding
                changshi = queding+i
                queding=temp
            elif queding+i <= changshi: #这就是很确定就是changshi最优
                queding = changshi #把queding存now
            print queding,changshi
        return changshi