• 动态规划——力扣刷题总结


    70,爬楼梯
    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
    简单题:设第n阶的方法为 f ( x ) f(x) f(x),则有 f ( x ) = f ( x − 1 ) + f ( x + 2 ) f(x)=f(x-1)+f(x+2) f(x)=f(x1)+f(x+2)
    代码;

    class Solution {
    public:
        int fn[46];
        int climbStairs(int n) {
            fn[1]=1;
            fn[2]=2;
            for(int i=3;i<=n;i++)
            {
                fn[i]=fn[i-1]+fn[i-2];
            }
            return fn[n];
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    53,最大数组和
    设置一个前缀和sum,当sum+x小于x时,即连续数组包括此x值时,不满足题意,将前缀和重新从x开始。
    取sum的最大值
    代码:

    class Solution {
    public:
        int maxSubArray(vector& nums ) {
            int n=nums.size();
            int sum=0;
            int ans=-999999999;
            for(int i=0;i
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    1706 球会落到何处
    对每一层情况进行分析,当前层的位置是有上一层的挡板情况确定,分析清楚什么时候右移一个位置,什么时候左移,什么时候卡在挡板处即可
    代码:

    class Solution {
    public:
        vector findBall(vector>& grid) {
            int col=grid[0].size();
            int row=grid.size();
            vectorans(col,0);
            for(int i=0;i=0&&grid[i][ans[j]-1]!=1)
                {
                    ans[j]--;
                }
                else{
                    ans[j]=-1;
                }
            }
            return ans;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    1420 生成数组
    设方法数为 f ( n , s , j ) s f(n,s,j)s f(n,s,j)s表示search_cost,n表示第几个数,j表示取何值。
    f ( n , s , j ) = f ( n − 1 , s , j ) ∗ j + ∑ i = 1 x f ( n − 1 , s − 1 , s ( s < j ) ) f(n,s,j)=f(n-1,s,j)*j+\sum_{i=1}^{x}f(n-1,s-1,s(sf(n,s,j)=f(n1,s,j)j+i=1xf(n1,s1,s(s<j)
    代码:

    class Solution {
    private:
    int mod=1000000007;
    int f[51][51][1000];
    int ans=0;
    public:
        int numOfArrays(int n, int m, int k) {
            for(int i=1;i<=m;i++)
            {
                f[1][1][i]=1;
            }
            for(int i=2;i<=n;i++)
            for(int s=1;s<=k&&s<=i;s++)
            for(int j=1;j<=m;j++)
            {
                f[i][s][j]=(long long)f[i-1][s][j]*j%mod;
                for(int temp=1;temp
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
  • 相关阅读:
    晶圆形成步骤
    计算机视觉中的数据预处理与模型训练技巧总结
    阿里云张新涛:连接产业上下游,构建XR协作生态
    如何准备好一场vue面试
    【LeetCode最详尽解答】15-三数之和 3sum
    字体反爬积累知识
    论文解读(GCC)《GCC: Graph Contrastive Coding for Graph Neural Network Pre-Training》
    REVA再创NFT托管新记录!Boodles等企业相继入局
    ① 尚品汇的后台管理系统【尚硅谷】【Vue】
    萌新卷妹带你逃出算法无名岛第六站
  • 原文地址:https://blog.csdn.net/liuwenhao_1/article/details/130912115