[leetcode] Unique Paths
2015-06-24 20:43
627 查看
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]
的数组,grid[i][j] =grid[i-1][j]
+
grid[i][j-1],空间时间复杂度O(m*n)。用滚动数组空间复杂度可降为O(n).
优化得到:
Solution 2:
向下走m-1, 向右走n-1。即从m+n-2步中,找出m步往下,其余步向右即可。组合数 C(m+n-2, m-1); 组合数可以用杨辉三角求。
最后我笑了。
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]
的数组,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); } };
相关文章推荐
- iOS学习笔记(3)UIButton
- UITextField隐藏键盘的几种方式
- Sicily 1443. Printer Queue
- 解决 Errors running builder 'DeploymentBuilder' on project ' .
- View requires API level 14 (current min is 8): <Switch>
- CSU 1658 IQ of XUEXX’s descendants 矩阵快速幂
- C# WebRequest WebClient Post请求Demo
- ZJU2136 Longest Ordered Subsequence
- iOS下载文件之NSData -UIImage
- UILabel和UITableview自定义分割线
- Bluemix云平台实践: CLI应用之DB2控制台(2)
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Query was empty
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Query was empty
- An internal error occurred during: "Building workspace". GC overhead limit exceeded
- An internal error occurred during: "Building workspace". GC overhead limit exceeded
- Bluemix云平台实践: CLI应用之DB2控制台(1)
- 限制 UITextField 输入长度
- 【Xamarin 】MonoTouch - UIImageView响应点击事件
- UI--学习模仿QQ未读提醒拖拽删除
- easyui combogrid onChanage 问题