Leetcode62-Uniquepath

题目地址:https://leetcode.com/problems/unique-paths/
第一次尝试性地在CSDN进行文章发表吧。没有做好充足地准备很多方面都做得不够好。需要自省。

  1. 准备了半个小时的时间做题和博客撰写是非常不足的。
  2. 思路的阐述和其他优秀想法都没有很好地考虑到,对于自身的学习上也是存在着不足点
  3. 之所以选这道题,两方面,一方面是自己对于DP和贪婪算法其实都掌握得不是特别好,无论从复习的角度还是从学习的角度都需要重新度量和进一步的理解学习,该题作为DP的经典题目之一,算是一个开始吧;另外一方面是考虑到第一次是自选题,就选了一道难度适中(可能对于我来说偏基础了一点)作为一个起点,在之后的路上走得更尽力些许。

题目的整体思路基本就是围绕DP算法的核心点来:
① 找出最优解的性质,并刻画其结构特征 —— 目标解是到达当前指定点的路径的最多路径计数
② 递归地定义最优值 —— 递归即是当前目标解可由其他子目标解获取得到,所以会考虑目标解是否可以由邻点目标解计算得到
③ 以自底向上的方式计算最优值 —— 因为当前目标解可由邻点得到,则一步步回推可以得到当只有一列或者一行时解是唯一。
④ 根据计算最优值得到的信息计算最优值 —— 邻点目标解的加和得到目标点解的加和

过程之上:

  1. 目标问题类型于子问题类型是一致的,这是运用DP的必备条件吗?
  2. 引申为点与点之间的距离是动态变化的,是否依旧可以这么求解? —— 可以,只要动态变化的规则式可求
  3. 代码实现有无优化点? —— 目前看来很简单粗暴暂时没有,不过实际应用中是要考虑二元组初始化。
  4. 爬楼梯问题?给定n个台阶,一次只能走一步和走两步,求到达n阶的方案数(步数和步长排序不同都属于不用方案)。。。得好好思考。
    class Solution {
        public int uniquePaths(int m, int n) {
            int grid[][] = new int[m][n];
            for(int i = 0; i < grid.length; i++){
                grid[i][0] = 1;
            }
            for(int j = 0; j < grid[0].length; j++){
                grid[0][j] = 1;
            }
            for(int i = 1; i < grid.length; i++){
                for(int j = 1; j < grid[i].length; j++){
                    grid[i][j] = grid[i-1][j] + grid[i][j-1];
                }
            }
            return grid[m-1][n-1];
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值