43. 最小路径和 (minimum-path-sum)
标签
- 动态规划
- 中等
题目
leetcode 传送门
这里不贴题了,leetcode打开就行,题目大意:
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小
。说明:每次只能向下或者向右移动一步。
相关知识
从动态规划这篇我们了解到动态规划的基本步骤是下面三步:
- 寻找最优子结构(状态表示)
- 归纳状态转移方程(状态计算)
- 边界初始化
然后上篇,我们有两个类似题提前看下,这题就太简单了。 前端算法面试必刷题系列[24]
基本步骤
接下来我们看下面具体问题
- 状态表示:
dp(i, j)
表示从左上角出发到(i, j)
位置的最小路径和
。
- 状态转移方程:
- 由于我们每一步只能
向下
或向右
移动一步,那么其实只有从(i-1, j)
或者(i, j-1)
这两处走过来,那么转移方程也很简单dp[i][j] = min(grid[i-1][j], grid[i][j-1])
,表示每条路径取较小的来路进行加和
- 边界初始化:
- 那么下面就是定边界,我们知道最上面一排和最左边一排,只有一种可能来的路径,
最顶时
,来的路只有从左边1条
,最左边
来的路只有从上面1条
。所以说,i = 0
或j = 0
时,直接进行来路加和就行,不用比较大小,因为只有一条。
写法实现
var minPathSum = function(grid) {
let [row, col] = [grid.length, grid[0].length]
// 可以直接在原来的数组中做原地 DP,不用额外空间
// 跟上题类似,把边界先加和,左边只能从上走,上边只能从左走
for (i = 1; i < row; i++) {
grid[i][0] += grid[i-1][0]
}
for (j = 1; j < col; j++) {
grid[0][j] += grid[0][j-1]
}
// 把剩下的非边界位置用递推公式补齐,据题意取来路较小路径的就行
for (i = 1; i < row; i++) {
for (j = 1; j < col; j++) {
grid[i][j] += Math.min(grid[i-1][j], grid[i][j-1])
}
}
return grid[row-1][col-1]
};
let grid = [[1,3,1],[1,5,1],[4,2,1]]
console.log(minPathSum(grid))
44. 加一 (plus-one)
标签
- Array
- 数学
- 简单
题目
leetcode 传送门
这里不贴题了,leetcode打开就行,题目大意:
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一
。
限制:
- 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
- 你可以假设除了整数 0 之外,这个整数不会以零开头。
例子
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
相关知识
这是个简单题,其实就分三种情况
- 末位无进位,则末位加一即可,比如
13 => 14
- 末位有进位,在中间位置进位停止,整体位数不变,需要找到进位的标志:
当前位 %10 == 0
,则前一位加 1,直到不为 0 为止,比如199 => 200
- 末位有进位,并且一直进位到最前方导致结果多出一位,比如
99 => 100
基本步骤
- 数组倒序遍历,若需要进位,先行 +1
- 判断当前数字是否大于 9, 大于代表需要进位,否则不进位。
- 遍历结束,还存在进位,则扩充数组,首位补充 1。
写法实现
var plusOne = function(digits) {
const len = digits.length
// 倒序遍历
for (let i = len - 1; i >= 0; i--) {
digits[i]++;
// 加一后看 % 10 是否为 0 ,为0说明有进位
digits[i] = digits[i] % 10;
if (digits[i] !== 0) {
// 直接输出就行
return digits;
}
}
// 如果遍历到最后都需要进位,说明是要扩充数组
digits = new Array(len + 1).fill(0)
digits[0] = 1;
return digits;
};
console.log(plusOne([9,9,9]))
今天就到这儿,想跟我一起刷题的小伙伴可以加我微信哦
搜索我的微信号infinity_9368
,可以聊天说地
加我暗号 "天王盖地虎" 下一句的英文
,验证消息请发给我
presious tower shock the rever monster
,我看到就通过,暗号对不上不加哈,加了之后我会尽我所能帮你,但是注意提问方式,建议先看这篇文章:提问的智慧
参考
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!