zoukankan      html  css  js  c++  java
  • [leetcode] 62. 不同路径

    62. 不同路径

    我们直接用递归来模拟

    class Solution {
    
        public static int cnt;
    
        public int uniquePaths(int m, int n) {
            cnt = 0;
            dfs(1, 1, m, n);
            return cnt;
        }
    
        public void dfs(int i, int j, int m, int n) {
            if (i == m && j == n) {
                cnt++;
                return;
            }
            if ((j + 1) <= n)
                dfs(i, j + 1, m, n);
            if ((i + 1) <= m)
                dfs(i + 1, j, m, n);
        }
    }
    

    好吧,果然超时了

    超在哪了,有些格子做了重复性计算。

    其实我们用动态规划来做就简单了:

    倒着想,既然机器人只能往右或者往下走,假设机器人已经走到了(i,j),那么机器人只会从左方或者右方走过来的

    我们用f[i][j]来描述机器人走到(i,j)的路径数

    显然,状态转移方程为:f[i][j] = f[i-1][j]+f[i][j-1]

    初始条件是多少呢?当ij1时,显然路径数就1个,所有初始条件是f[0][0]=1

    最终结果是:f[m-1][n-1]

    class Solution {
        public int uniquePaths(int m, int n) {
            int[][] f = new int[m][n];
            for (int i = 0; i < m; i++) {
                for (int j = 0; j < n; j++) {
                    if (i == 0 && j == 0) {
                        f[i][j] = 1;
                    }
                    if (i - 1 >= 0) {
                        f[i][j] += f[i - 1][j];
                    }
                    if (j - 1 >= 0) {
                        f[i][j] += f[i][j - 1];
                    }
                }
            }
            return f[m - 1][n - 1];
        }
    }
    
  • 相关阅读:
    第 9 章 类
    导入模块
    第 8 章 函数
    第七章 用户输入和while语句
    第六章 字典
    测试经理/组长职责
    测试的发展之路
    【转】测试流程
    一个网页通用的测试用例(借鉴他人的保存,加注释)
    QTP自动化测试框架简述
  • 原文地址:https://www.cnblogs.com/acbingo/p/9362893.html
Copyright © 2011-2022 走看看