首页 > 其他分享 >LeetCodeHot100 动态规划 70. 爬楼梯 118. 杨辉三角 198. 打家劫舍 279. 完全平方数 322. 零钱兑换

LeetCodeHot100 动态规划 70. 爬楼梯 118. 杨辉三角 198. 打家劫舍 279. 完全平方数 322. 零钱兑换

时间:2024-03-29 11:12:19浏览次数:22  
标签:198 nums int LeetCodeHot100 amount max 杨辉三角 new dp

70. 爬楼梯
https://leetcode.cn/problems/climbing-stairs/description/?envType=study-plan-v2&envId=top-100-liked

public int climbStairs(int n) {
        if (n <= 1) return n;
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }

总结:dp数组的含义是当前台阶有几种方法。
118. 杨辉三角
https://leetcode.cn/problems/pascals-triangle/description/?envType=study-plan-v2&envId=top-100-liked

public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> resList = new ArrayList<>();
        int[][] dp = new int[numRows][numRows];
        for (int i = 0; i < numRows; i++) {
            for (int j = 0; j <= i; j++) {
                if (i - 1 >= 0 && j - 1 >= 0){
                    dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
                }else {
                    dp[i][j] = 1;
                }
            }
        }
        for (int i = 0; i < numRows; i++) {
            List<Integer> list = new ArrayList<>();
            for (int j = 0; j <= i; j++) {
                list.add(dp[i][j]);
            }
            resList.add(list);
        }
        return resList;
    }

总结:二维dp数组
198. 打家劫舍
https://leetcode.cn/problems/house-robber/description/?envType=study-plan-v2&envId=top-100-liked

public int rob(int[] nums) {
        if (nums.length == 0) return 0;
        if (nums.length == 1) return nums[0];
        int max = 0;
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        dp[1] = Math.max(dp[0],nums[1]);
        for (int i = 2; i < nums.length; i++) {
            dp[i] = Math.max(dp[i - 2] + nums[i],dp[i - 1]);
        }
        for (int i = 0; i < dp.length; i++) {
            max = dp[i] > max ? dp[i] : max;
        }
        return max;
    }

总结:dp数组就是到这个屋子能偷的最大的钱,最大的钱看偷不偷当前污渍,偷了就是dp[i-2] + 当前,不偷就是dp[i-1]
279. 完全平方数
https://leetcode.cn/problems/perfect-squares/description/?envType=study-plan-v2&envId=top-100-liked

public int numSquares(int n) {
        int[] dp = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            dp[i] = i;
            for (int j = 1; i - j * j >= 0; j++) {
                dp[i] = Math.min(dp[i],dp[i - j * j] + 1);
            }
        }
        return dp[n];
    }

总结:先把dp全设为i, 再取dp[i]和dp[i-j方]+1 的小者。 i - jj >= 0 就是j从1遍历到根号i。 找到j这里之后 用i-jj 就是剩下的数,再去看这个剩下的数的dp值 ,+1是说要加上找到的这个j这步。
322. 零钱兑换
https://leetcode.cn/problems/coin-change/description/?envType=study-plan-v2&envId=top-100-liked

public int coinChange(int[] coins, int amount) {
        int[] dp = new int[amount + 1];
        //加1W代表这个位置是无法凑成的
        Arrays.fill(dp,amount + 10000);
        //记得置0,因为如果你能找到0了,那一定有方案可以凑成了啊
        dp[0] = 0;
        for (int i = 1; i <= amount; i++) {
            for (int coin : coins) {
                if (i >= coin){
                    dp[i] = Math.min(dp[i],dp[i - coin] + 1);
                }
            }
        }
        return dp[amount] == amount + 10000 ? -1 : dp[amount];
    }

总结:dp的初始化是无法到达的数,之后再一步步推。

标签:198,nums,int,LeetCodeHot100,amount,max,杨辉三角,new,dp
From: https://www.cnblogs.com/jeasonGo/p/18103365

相关文章

  • Python中的杨辉三角
    杨辉三角,也被称为帕斯卡三角,是一个非常有趣的数学结构,它在组合数学中扮演着重要的角色。在这篇博客中,我们将探讨如何在Python中生成杨辉三角,并讨论不同方法的优缺点。杨辉三角简介杨辉三角是一个由数字构成的三角形阵列,其中每个数字是它正上方两个数字的和。例如,下面是杨辉三......
  • LeetCodeHot100 链表 160. 相交链表 206. 反转链表 234. 回文链表 141. 环形链表
    160.相交链表https://leetcode.cn/problems/intersection-of-two-linked-lists/description/?envType=study-plan-v2&envId=top-100-likedpublicListNodegetIntersectionNode(ListNodeheadA,ListNodeheadB){intlenA=0;intlenB=0;L......
  • LeetCodeHot100 数组 53. 最大子数组和 56. 合并区间 238. 除自身以外数组的乘积
    53.最大子数组和https://leetcode.cn/problems/maximum-subarray/description/?envType=study-plan-v2&envId=top-100-likedpublicintmaxSubArray(int[]nums){int[]dp=newint[nums.length];dp[0]=nums[0];for(inti=1;i<nums......
  • LeetCodeHot100 栈 155. 最小栈 394. 字符串解码
    155.最小栈https://leetcode.cn/problems/min-stack/description/?envType=study-plan-v2&envId=top-100-likedclassMinStack{Deque<Integer>deque;PriorityQueue<Integer>priorityQueue;publicMinStack(){de......
  • P4198 楼房重建
    P4198楼房重建求从\((0,0)\)往上看能看到多少栋没被挡住的楼房,带修改。对于带修改的题目,我们需要快速维护,就需要用到数据结构。这时候通过直觉可以想到,问题是可以分为子问题然后合并得到的,所以我们考虑线段树。观察到能被看到的楼房,从左到右斜率递增,即我们需要维护斜率递增......
  • 杨辉三角C语言
    杨辉三角输出杨辉三角前10行#include<stdio.h>intmain(){ inta[10][10]; for(inti=0;i<10;i++){ a[i][0]=1; a[i][i]=1; } for(inti=2;i<10;i++) for(intj=1;j<i;j++) a[i][j]=a[i-1][j]+a[i-1][j-1]; for(inti=0;i<10;i++){ for(intj=0......
  • LeetCodeHot100 二分查找 35. 搜索插入位置 74. 搜索二维矩阵 34. 在排序数组中查
    35.搜索插入位置https://leetcode.cn/problems/search-insert-position/description/?envType=study-plan-v2&envId=top-100-likedpublicintsearchInsert(int[]nums,inttarget){intleft=0;intright=nums.length-1;while(left<......
  • Leecode 杨辉三角Ⅱ
    Day7第二题我的思路和上一篇的杨辉三角一致,只不过将List获取层数的代码List.get(0).add()修改成数组classSolution{publicList<Integer>getRow(introwIndex){List<Integer>getRow=newArrayList<Integer>();int[][]dp=newint[ro......
  • 118. 杨辉三角c
    /***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesarray.*Note:Bothreturnedarrayand*columnSizesarraymustbemalloced,assumecallercallsfree().*/int**generate(intnumRows,in......
  • Gym 101981-I Magic Potion 题解
    传送门题意:有\(n\)个勇者和\(m\)个怪物,第\(i\)个勇者有一个可杀怪物集合\(M_i\),每个勇者只能杀各自\(M_i\)中的一个怪物。但是你有\(k\)瓶魔药,每一瓶都可以让一个勇者多杀一个\(M_i\)中的怪物。但是每个勇者只能吃一瓶药。问最多能杀多少个。考虑让勇者和怪物匹......