LeetCode实战:不同路径

news/2024/7/7 17:16:46

题目英文

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 7 x 3 grid. How many possible unique paths are there?

Note: m and n will be at most 100.

Example 1:

Input: m = 3, n = 2
Output: 3
Explanation:
From the top-left corner, there are a total of 3 ways to reach the bottom-right corner:
1. Right -> Right -> Down
2. Right -> Down -> Right
3. Down -> Right -> Right

Example 2:

Input: m = 7, n = 3
Output: 28

题目中文

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?

问题

例如,上图是一个7 x 3 的网格。有多少可能的路径?

说明:m 和 n 的值均不超过 100。

示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右

示例 2:

输入: m = 7, n = 3
输出: 28

示例 3:

输入: m = 23, n = 12
输出: 193536720

算法实现

方式一:利用递归

public class Solution
{private int _m;private int _n;public int UniquePaths(int m, int n){_m = m;_n = n;int count = 0;RecordPaths(0, 0, ref count);return count;}private void RecordPaths(int i, int j, ref int count){if (i == _m - 1 && j == _n - 1){count++;return;}if (i < _m){RecordPaths(i + 1, j, ref count);}if (j < _n){RecordPaths(i, j + 1, ref count);}}
}

使用递归的方式,容易理解但会耗费大量的时间,所以在运行 示例3 的时候,超时了。

方式二:利用动态规划

动态规划表格01:

表01

动态规划表格02:

表02

动态规划的最优子结构为:d[i,j] = d[i-1,j] + d[i,j-1]

public class Solution
{public int UniquePaths(int m, int n){int[,] memo = new int[m, n];for (int i = 0; i < m; i++){for (int j = 0; j < n; j++){if (i == 0){memo[i, j] = 1;}else if (j == 0){memo[i, j] = 1;}else{memo[i, j] = memo[i - 1, j] + memo[i, j - 1];}}}return memo[m - 1, n - 1];}
}

实验结果

  • 状态:通过
  • 62 / 62 个通过测试用例
  • 执行用时: 52 ms, 在所有 C# 提交中击败了 93.18% 的用户
  • 内存消耗: 13.6 MB, 在所有 C# 提交中击败了 17.65% 的用户

提交记录


相关图文

1. “数组”类算法

  • LeetCode实战:三数之和
  • LeetCode实战:最接近的三数之和
  • LeetCode实战:求众数
  • LeetCode实战:缺失的第一个正数
  • LeetCode实战:快乐数
  • LeetCode实战:寻找两个有序数组的中位数
  • LeetCode实战:盛最多水的容器
  • LeetCode实战:删除排序数组中的重复项
  • LeetCode实战:搜索旋转排序数组
  • LeetCode实战:螺旋矩阵

2. “链表”类算法

  • LeetCode实战:两数相加
  • LeetCode实战:删除链表的倒数第N个节点
  • LeetCode实战:合并两个有序链表
  • LeetCode实战:合并K个排序链表
  • LeetCode实战:两两交换链表中的节点
  • LeetCode实战:旋转链表
  • LeetCode实战:环形链表

3. “栈”类算法

  • LeetCode实战:有效的括号
  • LeetCode实战:最长有效括号
  • LeetCode实战:逆波兰表达式求值

4. “队列”类算法

  • LeetCode实战:设计循环双端队列
  • LeetCode实战:滑动窗口最大值
  • LeetCode实战:整数反转
  • LeetCode实战:字符串转换整数 (atoi)

5. “递归”类算法

  • LeetCode实战:爬楼梯

6. “字符串”类算法

  • LeetCode实战:反转字符串
  • LeetCode实战:翻转字符串里的单词
  • LeetCode实战:最长公共前缀
  • LeetCode实战:字符串相加
  • LeetCode实战:字符串相乘

7. “树”类算法

  • LeetCode实战:相同的树
  • LeetCode实战:对称二叉树
  • LeetCode实战:二叉树的最大深度
  • LeetCode实战:将有序数组转换为二叉搜索树

8. “哈希”类算法

  • LeetCode实战:两数之和

9. “搜索”类算法

  • LeetCode实战:搜索二维矩阵

10. “动态规划”类算法

  • LeetCode实战:最长回文子串
  • LeetCode实战:最大子序和

11. “回溯”类算法

  • LeetCode实战:全排列

11. “数值分析”类算法

  • LeetCode实战:回文数
  • LeetCode实战:x 的平方根

http://lihuaxi.xjx100.cn/news/255236.html

相关文章

[bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划

食物链 bzoj-4562 Haoi-2016 题目大意&#xff1a;给你n个点&#xff0c;m条边的DAG&#xff0c;求所有的满足条件的链&#xff0c;使得每条链的起点是一个入度为0的点&#xff0c;中点是一条出度为0的点。 注释&#xff1a;$1\le n\le 10^5$&#xff0c;$1\le m\le 2*10^5$。 …

数组与纠结的排序篇

数组之纠结的排序 1.数组是什么&#xff1f; 数组&#xff1a;所谓数组&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;就是把有限个类型相同的变量用一个名字命名&#xff0c;然后用编号区分他们的变量的集合&#xff0c;这个名字称为数组名&#xff0c;…

接口性能优化技巧,有点硬...

欢迎关注方志朋的博客&#xff0c;回复”666“获面试宝典文章来源&#xff1a;http://b.nxw.so/1jSSgg目录背景哪些问题会引起接口性能问题问题解决总结背景我负责的系统在去年初就完成了功能上的建设&#xff0c;然后开始进入到推广阶段。随着推广的逐步深入&#xff0c;收到了…

基于OHCI的USB主机 —— 结束语

从去年11月份开始连载的《基于OHCI的USB主机》系列总算告一段落了&#xff0c;到UFI命令层为止&#xff0c;所有USB主机的底层处理就结束了&#xff0c;再上面就是磁盘读写、文件系统、文件读写和应用系统了。这些上层应用基本上是与USB主机没有什么关系的&#xff0c;我的这个…

GPT-3 再更新,新增编辑和插入文本功能,简直不要太好用!

编译 | 禾木木出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;GPT-3 是 OpenAL 提出的基于上下文的超大规模自然处理深度学习模型。这意味着如果你给 GPT-3 某些上下文内容时&#xff0c;它会试图去填充其余内容。例如给出句子的前部分&#xff0c;它会推测出下半部分…

LeetCode实战:合并两个有序数组

题目英文 Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: The number of elements initialized in nums1 and nums2 are m and n respectively.You may assume that nums1 has enough space (size that is greater o…

人工智能本科专业高校名单大全(440所)

Datawhale干货 编辑&#xff1a;机器之心、Datawhale文章有点长&#xff0c;目录预览&#xff1a;清华大学刘知远教授答疑各大开设人工智能的院校在计算机专业和人工智能日益火爆的当下&#xff0c;很多人对这两个专业又是好奇又是憧憬。对此&#xff0c;清华大学刘知远教授近日…

ADSL注册表优化技巧 XP

【导读】针对使用windows XP的用户&#xff0c;ADSL注册表简易优化策略介绍如下&#xff1a;在做这些修改之前请先做好注册表的备份&#xff0c;以便不适合你的情况的时候或修改错误时恢复。(注意&#xff1a;本方法只适用于PPPoE方式的ADSL用户) ADSL优化势在必行&#xff0c;…