62.Unique Paths[Medium]
Description
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?
Solution
从(1,1)出发,只能向右或者向下,到达(m,n)处。
有点像以前写过的上台阶,每次能走1步或者2步。可以从最简单的情况开始考虑,当m等于1或者n等于1的时候,只有一种选择,m等于2、n等于2时,相当于m等于1、n等于2的选择种数加上m等于2、n等于1的选择种数。第一种情况是选择先往下走,第二种情况相当于先往右走。
很容易写出递归式:
if (m == 1 || n == 1)
return 1;
else return uniquePaths(m-1, n) + uniquePaths(m, n-1);
然而超时,转化一下用循环。
Complexity analysis
O(mn)
Code
class Solution {
public:
int uniquePaths(int m, int n) {
int arr[101][101] = {0};
//if (m == 1 || n == 1)
//return 1;
for (int i = 0; i <= m; i++) {
arr[i][1] = 1;
}
for (int i = 0; i <= n; i++) {
arr[1][i] = 1;
}
for (int i = 2; i <= m; i++) {
for (int j = 2; j <= n; j++) {
arr[i][j] = arr[i-1][j] + arr[i][j-1];
}
}
return arr[m][n];
}
};