力扣-不同路径

思路

力扣-不同路径_第1张图片
力扣-不同路径_第2张图片

  1. 斜着看
  2. 如果我想知道到第三块共有多少种走法,我只需要知道到第1块有几种走法和到第2块有几种走法
    到第1块和第2块的之和便是 到第三块的走法。
  public int uniquePaths(int m, int n) {
		  
		  int N=Math.max(m, n);
		  int M=Math.min(m, n);
		  
		  int mark[][]=new int[M+1][N+1];  //M行 N列
		  mark[1][1]=1;
		  for(int i=2;i<=N;i++) //从第2 列 到最后一列
		  {
			  for(int j=1;j<=M;j++)  //行号从第一行到最后一行
			  {
				  if((i-j)<0)  // 到本行为止之后无斜着的一行
				  {
					  break;
				  }
			   if(i-j+1-1>=1)  //j-i为列 -1 前一列
			   {
				   mark[j][i-j+1]+=mark[j][i-j+1-1];
			   }
			   if(j-1>=1)  // 上一行
			   {
				   mark[j][i-j+1]+=mark[j-1][i-j+1];
			   }
			  }
		  }
		  
		  for(int i=2;i<=M;i++)  //行号从 2行 到最后一行
		  {
			  int row=i;
			for(int j=0;j<=M-i;j++)
			{
				mark[row][N-j]=mark[row-1][N-j]+mark[row][N-j-1];
				row++;
			}
	  }
	  
	
		  
		  
		  
		  return mark[M][N];      
	 }

你可能感兴趣的:(动态规划)