这是我参与更文挑战的第 11 天,活动详情查看 更文挑战
这个系列没啥花头,就是纯 leetcode 题目拆解分析,不求用骚气的一行或者小众取巧解法,而是用清晰的代码和足够简单的思路帮你理清题意。让你在面试中再也不怕算法笔试。
118. 字符串相乘 (multiply-strings)
标签
- 字符串
- 中等
题目
这里不贴题了,leetcode打开就行,题目大意:
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积
,它们的乘积也表示为字符串形式。
示例 1:
输入: num1 = "2", num2 = "3"
输出: "6"
示例 2:
输入: num1 = "123", num2 = "456"
输出: "56088"
基本思路
这个问题是不是要用竖式整来整去,不好意思,我们用的是 js
ES6 有个 BigInt
了解一下? 用时和空间都优于 97.71%
写法实现
var multiply = function(num1, num2) {
return ((BigInt(num1)*BigInt(num2)) + "")
};
119. 螺旋矩阵 II (spiral-matrix-ii)
标签
- 二维数组
- 中等
题目
这里不贴题了,leetcode打开就行,题目大意:
给你一个正整数 n ,生成一个包含 1
到 n^2
所有元素,且元素按顺时针顺序螺旋排列
的 n x n
正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
基本思路
我们之前做过螺旋矩阵I, 可以先回顾一下,思路是相通的。
- 构建
n * n
的矩阵 - 边界划分,定下四个角的坐标
- 按照边界范围,从左上角开始,一圈一圈走格子就行了,每走一步 curNum++,直到格子数(n * n)被耗尽
写法实现
var generateMatrix = function(n) {
const matrix = new Array(n).fill(0).map(() => new Array(n).fill(0))
let curNum = 1;
// 四个角点的坐标
let [left, top, right, bottom] = [0, 0, n-1, n-1]
// 当前数字在增长,但不会大于方块总数
while (curNum <= n * n) {
// 接下来其实就是一个个方块走过去就行了
// 先顶上的一行
for (let i = left; i <= right; i++) {
// 第一行所以 top 是定下的 0
matrix[top][i] = curNum
curNum++
}
// 下次再转过来就是第二行 top 坐标为 1,所以这里要 top++
top++;
// 下面是以,top坐标开头,往下走走到 bottom
// 接下来不赘述,就是转,细心就行
for (let i = top; i <= bottom; i++) {
// 这次列是一定的,就是最右侧的一列,坐标 right
matrix[i][right] = curNum
curNum++
}
right--;
for (let i = right; i >= left; i--) {
matrix[bottom][i] = curNum
curNum++;
}
bottom--;
for (let i = bottom; i >= top; i--) {
matrix[i][left] = curNum
curNum++;
}
left++;
}
return matrix;
}
console.log(generateMatrix(3))
// [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
另外向大家着重推荐下这个系列的文章,非常深入浅出,对前端进阶的同学非常有作用,墙裂推荐!!!核心概念和算法拆解系列
今天就到这儿,想跟我一起刷题的小伙伴可以加我微信哦 点击此处交个朋友
Or 搜索我的微信号infinity_9368
,可以聊天说地
加我暗号 "天王盖地虎" 下一句的英文
,验证消息请发给我
presious tower shock the rever monster
,我看到就通过,加了之后我会尽我所能帮你,但是注意提问方式,建议先看这篇文章:提问的智慧