[leetcode] Unique Paths

来源:互联网 发布:淘宝僵尸店宝贝上万个 编辑:程序博客网 时间:2024/06/14 00:38

From : https://leetcode.com/problems/unique-paths/

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).

How many possible unique paths are there?


Above is a 3 x 7 grid. How many possible unique paths are there?

Note: m and n will be at most 100.

Solution 1:

grid[m][n]的数组,grid[i][j] =grid[i-1][j] + grid[i][j-1],空间时间复杂度O(m*n)。用滚动数组空间复杂度可降为O(n).

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


优化得到:

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


Solution 2:

向下走m-1, 向右走n-1。即从m+n-2步中,找出m步往下,其余步向右即可。组合数 C(m+n-2, m-1); 组合数可以用杨辉三角求。

class Solution {public:    int uniquePaths(int m, int n) {        vector<int> line;        if(m==1 || n==1) return 1;        n = m+n-2;        line.push_back(1);        for(int i=0; i<n; i++) {            line.push_back(1);            for(int j=line.size()-2; j>0; j--) {                line[j] = line[j]+line[j-1];            }        }        return line[m-1];    }};


最后我笑了。


class Solution {public:    int uniquePaths(int m, int n) {        double dom = 1;        double dedom = 1;        int small = m<n? m-1:n-1;        int big = m<n? n-1:m-1;        for(int i=1;i<=small;i++) {            dedom *= i;            dom *= small+big+1-i;        }        return (int)(dom/dedom);    }};

0 0
原创粉丝点击