Leetcode62:不同路径(Ⅰ和Ⅱ)

目录

  • Leetcode62:不同路径Ⅰ
    • 题目描述
    • 思路分析
  • Leetcode63:不同路径Ⅱ
    • 题目描述
    • 代码实现

Leetcode62:不同路径Ⅰ

题目描述

Leetcode62:不同路径(Ⅰ和Ⅱ)_第1张图片

思路分析

解法一:动态规划

public int uniquePaths1(int m,int n) {
		int[][]res=new int[m][n];
		for (int i = 0; i < m; i++)
		{
			res[i][0]=1;
		}
		for (int i = 0; i < n; i++)
		{
			res[0][i]=1;
		}
		for (int i = 1; i < m; i++)
		{
			for (int j = 1; j < n; j++)
			{
				res[i][j]=res[i-1][j]+res[i][j-1];
			}
			
		}
		return res[m-1][n-1];
	}

解法二:将空间复杂度降为一维

public int uniquePaths2(int m,int n) {
		int[]res=new int[n];
		res[0]=1;
		for (int i = 0; i < m; i++)
		{
			for (int j = 1; j < n; j++)
			{
				res[j]=res[j]+res[j-1];
			}
		}
		return res[n-1];
	}

解法三:公式法
Leetcode62:不同路径(Ⅰ和Ⅱ)_第2张图片

public int uniquePaths3(int m,int n) {
	int count=m+n-2;
	int k=m-1;
	double res=1;
	for (int i = 1; i <=k; i++)
	{
		res=res*(count-k+1)/i;
	}
	return (int)res;	
	}	

Leetcode63:不同路径Ⅱ

题目描述

Leetcode62:不同路径(Ⅰ和Ⅱ)_第3张图片

代码实现

public int uniquePaths2_2(int[][] obstacleGrid) {
		int length=obstacleGrid[0].length;
		int[]res=new int[length];
		res[0]=1;
		for (int i = 0; i < obstacleGrid.length; i++)
		{
			for (int j = 0; j < obstacleGrid[0].length; j++)
			{
				if (obstacleGrid[i][j]==1)
				{
					res[j]=0;
				}else if (j>0) {
					res[j]+=res[j-1];
				}
			}
		}
		return res[length-1];
	}

你可能感兴趣的:(算法)