zoukankan      html  css  js  c++  java
  • Unique Paths

    题目链接

    Unique Paths - LeetCode

    注意点

    • 数字很大,结果可能会溢出

    解法

    解法一:dfs,效率很低。

    class Solution {
    public:
        void dfs(int x,int y,int& ret,int m,int n,vector<vector<int>> direction)
        {
            if(x == m-1 && y == n-1)
            {   
                ret++;
                return;
            }
            //cout << x << " " << y << endl;
            if(x+1 <= m-1) dfs(x+direction[0][0],y+direction[0][1],ret,m,n,direction);
            if(y+1 <= n-1) dfs(x+direction[1][0],y+direction[1][1],ret,m,n,direction);
        }
        int uniquePaths(int m, int n) {
            int ret = 0;
            vector<vector<int>> direction{{1,0},{0,1}};
            dfs(0,0,ret,m,n,direction);
            return ret;
        }
    };
    

    解法二:dp,走到某一格的位置等于它左边和上面格子的dp值之和。其实只需要一个一维数组也可以实现。时间复杂度O(mn)

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            int i,j,dp[n][m];
            for(i = 0; i < n;i++)
            {
                for(j = 0;j < m;j++)
                    dp[i][j] = 0;
            }
            dp[0][0] = 1;
            for(i = 0;i < n;i++)
            {
                for(j = 0;j < m;j++)
                {
                    if(i-1 >= 0) dp[i][j] += dp[i-1][j];
                    if(j-1 >= 0) dp[i][j] += dp[i][j-1];
                }
            }
            return dp[n-1][m-1];
        }
    };
    

    解法三:参见Code_Ganker的博客。我的代码和他的略有不同,我没有区分m和n哪个更小,这样最后就要进行四舍五入。

    class Solution {
    public:
        int uniquePaths(int m, int n) {
            double num = 1, denom = 1; // int may overflow
            for (int i = 1; i <= n - 1; i++) 
            {
                num *= m + n - 1 - i;
                denom *= i;
            }
            return (int)(num / denom + 0.5); // to the nearest whole number
        }
    };
    

    小结

    • 动态规划题
  • 相关阅读:
    包含min函数的栈
    树的子结构
    合并两个排序的链表
    反转链表
    字符移位
    有趣的数字
    顺时针打印矩阵
    有道云笔记自动签到
    Shell重定向
    Ubuntu 18.04安装Docker
  • 原文地址:https://www.cnblogs.com/multhree/p/10453362.html
Copyright © 2011-2022 走看看