题解 | #不同路径的数目(一)#

不同路径的数目(一)

https://www.nowcoder.com/practice/166eaff8439d4cd898e3ba933fbc6358?tpId=295&tqId=685&ru=%2Fpractice%2Ff33f5adc55f444baa0e0ca87ad8a6aac&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295

数学解法不是很理解,能够画出来式子,但是转化为代码计算不是很理解

class Solution {
public:
    /**
     * 
     * @param m int整型 
     * @param n int整型 
     * @return int整型
     */
  //  到达最后一个结点有两种方式,一个向下一个向右这两种
  //  使用递归从后面往前推容易理解
  //  使用动态规划
  //  运用数学 --> 最优解
    int uniquePaths(int m, int n) {
//  递归思路
      if (m == 1 || n == 1) {
        return 1;
      }
      
      //  分别是开头向右走和向下走的结果之和
      return uniquePaths(m - 1, n) + uniquePaths(m, n - 1);

//  动态规划
      //  dp[m][n] 表示在m*n地图中的路径数,求值范围从 1,1 到 m,n
      std::vector<std::vector<int>> dp(m + 1, std::vector<int>(n + 1, 0));
      
      for (int i = 1; i <= m; ++i) {
        for (int j = 1; j <= n; ++j) {
          //  两个if都是边界处,不能用转移方程
          //  同时也可以直接求得,无需状态转移
          if (i == 1) {
            dp[i][j] = 1;
            continue;
          }
          if (j == 1) {
            dp[i][j] = 1;
            continue;
          }
          //  每一结点的路径数都等于其左方和上方结点路径数之和
          dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
        }
      }
      
      return dp[m][n];
//  运用数学
      //  m-1 和 n-1 总步数,对这些总步数进行排列组合。
      //  手动计算出结果表达式,然后算表达式结果
      //  (m+n-2)!/((m-1)!*(n-1)!)
      //防止溢出
      long res = 1; 
      for(int i = 1; i < n; i++)
          res = res * (m + i - 1) / i; 
      return (int)res;
    }
};
全部评论

相关推荐

笑死&nbsp;不是哥们离校了我真要睡街了&nbsp;加上还有几w的贷款&nbsp;不接受我准备去当三和大神
梦想是成为七海千秋:没事,hr这下就有底气了,下次遇到一个不接受的就说,你看,人家这学历都接受了,你凭什么不接受
点赞 评论 收藏
分享
鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
frutiger:逆天,我家就安阳的,这hr咋能说3k的,你送外卖不比这工资高得多?还说大厂来的6k,打发叫花子的呢?这hr是怎么做到说昧良心的话的
点赞 评论 收藏
分享
面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务