1、dfs:小朋友,也许你会问,这明明是dp的题,为什么总dfs呢?别问,问就是头铁,看见这种题,不过脑子,自动dfs
2、dfs的确出结果了,但是LeetCode运行结果和我的结果不一样???
leetcode:
???什么情况,每次老子一用dfs就出这种情况,难道dp的题不允许使用dfs了???结果明明是可以正确的呀,按理说,也不会超时。
代码:
package com.leetCode.dp;
public class leet62 {
public static void main(String[] args) {
System.out.println(uniquePaths(7,3));
}
static int ans = 0;
public static int uniquePaths(int m, int n) {
int[][] arr = new int[m][n];
dfs(0,0,arr,m,n);
return ans;
}
private static void dfs(int i, int j, int[][] arr,int m,int n) {
if(i==m-1&&j==n-1)
{
ans++;
return ;
}
if(i>=m||j>=n) return;
dfs(i+1,j,arr,m,n);
dfs(i,j+1,arr,m,n);
}
}
3、题解思路:
(1)简单的动态规划:
dp[i][j]:从开头走到
首先是第一行和第一列,因为只能向右或向下走到达,所以只有一种选择
中间的过程,就是上面格子的值加上左边格子的值
代码:
package com.leetCode.dp;
public class leet62_t {
public static void main(String[] args) {
System.out.println(uniquePaths(7,3));
}
public static int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
for(int i=0;i<m;i++) dp[i][0]=1;
for(int i=0;i<n;i++) dp[0][i]=1;
for(int i=1;i<m;i++)
for(int j=1;j<n;j++)
dp[i][j]=dp[i-1][j]+dp[i][j-1];
return dp[m-1][n-1];
}
}