Leetcode 动态规划 Unique Paths

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie

Unique Paths

Total Accepted: 17915 Total
Submissions: 57061My Submissions

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.

题意:给定一个 m * n 的网格,一个机器人要从左上角走到右下角,每次只能向下或向右移动一个位置,

问有多少种走法

思路1:dfs暴力枚举

复杂度:超时了... O(2^n)

思路2:记忆化搜索

用一个数组paths[i][j]记录从 (0,0) 到 (m,n)的路径数

思路3:dp

设置状态为f[i][j],表示从(0,0)到达网格(i,j)的路径数,则状态转移方程为

f[i][j] = f[i - 1][j] + f[i][j - 1]

复杂度:时间O(n^2) 空间 O(n)

//思路1
int uniquePaths(int m, int n){
	if(m < 0 || n < 0) return 0;
	if(m == 1 && n == 1) return 1;
	return uniquePaths(m - 1, n) + uniquePaths(m, n - 1);
}

//思路2
//path[i][j]表示从(0,0)到(i,j)的路径数
int paths[101][101];
int dfs(int m, int n){
	if(m < 0 || n < 0) return 0;
	if(m == 1 && n == 1) return 1;
	if(paths[m][n] >= 0) return paths[m][n];
	return paths[m][n] = dfs(m - 1, n) + dfs(m, n - 1);
}
int uniquePaths(int m, int n){
	memset(paths, -1, sizeof(paths));
	return dfs(m, n);
}

//思路2另一种写法
//path[i][j]表示从(i,j)到(m - 1,n - 1)的路径数
int paths[101][101];
int mm, nn;
int dfs(int x, int y){
	if(x >= mm || y >= nn) return 0;
	if(x == mm - 1 && y == nn - 1) return 1;
	if(paths[x][y] >= 0) return paths[x][y];
	return paths[x][y] = dfs(x + 1, y) + dfs(x, y + 1);
}
int uniquePaths(int m, int n){
	mm = m, nn = n;
	memset(paths, -1, sizeof(paths));
	return dfs(0, 0);
}

//思路3 path[i][j] 表示(0, 0) 到(i,j)的路径数
int paths[101][101];
int uniquePaths(int m, int n){
	memset(paths, 0, sizeof(paths));
	for(int i = 0; i < m; ++i) paths[i][0] = 1;
	for(int j = 0; j < n; ++j) paths[0][j] = 1;
	for(int i = 1 ; i < m; ++i){
		for(int j = 1; j < n; ++j){
			paths[i][j] = paths[i - 1][j] + paths[i][j - 1];
		}
	}
	return paths[m - 1][n - 1];
}

时间: 2024-08-30 16:37:02

Leetcode 动态规划 Unique Paths的相关文章

Leetcode 动态规划 Unique Paths II

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Unique Paths II Total Accepted: 13655 Total Submissions: 49081My Submissions Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would t

LeetCode --- 62. Unique Paths

题目链接: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 (ma

LeetCode --- 63. Unique Paths II

题目链接:Unique Paths II Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one

【Leetcode】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 t

【LeetCode】Unique Paths II 解题报告

[题目] Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one obstacle in the

[C++]LeetCode: 78 Unique Paths II

题目: Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one obstacle in the m

【Leetcode】Unique Paths II

Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one obstacle in the middl

[LeetCode]20. Unique Paths II唯一路径

Follow up for "Unique Paths": Now consider if some obstacles are added to the grids. How many unique paths would there be? An obstacle and empty space is marked as 1 and 0 respectively in the grid. For example, There is one obstacle in the middl

[LeetCode][JavaScript]Unique Paths

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