LeetCode简单题:198. 打家劫舍(Python,C++,Java)

一.解法

https://leetcode-cn.com/problems/house-robber/
要点:dp动态规划
Python,C++,Java都用了相同的动态规划法。
动态规划题关键在于找转移方程,对于本题来说,如果数组长度为0,则返回0,如果数组长度为1,则返回nums[1],数组长度为2,则返回max(nums[1],nums[2]),当长度大于等于3时,i位置时当前最大值为max(dp[i-2]+nums[i],dp[i-1]),最后返回dp[length-1]即为本题答案。

二.Python实现

class Solution:
    def rob(self, nums: List[int]) -> int:
        dp=[]
        length=len(nums)
        if length==0:
            return 0
        dp.append(nums[0])
        if length==1:
            return dp[0]
        dp.append(max(nums[0],nums[1]))
        if length==2:
            return dp[1]
        
        for i in range(2,length):
            dp.append(max(dp[i-1],dp[i-2]+nums[i]))
        return dp[length-1]

三.C++实现

class Solution {
public:
    int rob(vector& nums) {
        vector dp;
        int length=nums.size();
        if(length==0) return 0;
        dp.push_back(nums[0]);
        if(length==1) return dp[0];
        dp.push_back(max(nums[0],nums[1]));
        if(length==2) return dp[1];
        for(int i=2;i

四.java实现

class Solution {
    public int rob(int[] nums) {
        ArrayList dp = new ArrayList<>(); 
        int length=nums.length;
        if(length==0) return 0;
        dp.add(nums[0]);
        if(length==1) return dp.get(0);
        dp.add(Math.max(nums[0],nums[1]));
        if(length==2) return dp.get(1);
        for(int i=2;i

你可能感兴趣的:(LeetCode简单题:198. 打家劫舍(Python,C++,Java))