前端算法必刷题系列[62]

1,033 阅读2分钟

这是我参与更文挑战的第 11 天,活动详情查看 更文挑战

这个系列没啥花头,就是纯 leetcode 题目拆解分析,不求用骚气的一行或者小众取巧解法,而是用清晰的代码和足够简单的思路帮你理清题意。让你在面试中再也不怕算法笔试。

118. 字符串相乘 (multiply-strings)

标签

  • 字符串
  • 中等

题目

leetcode 传送门

这里不贴题了,leetcode打开就行,题目大意:

给定两个以字符串形式表示的非负整数 num1num2,返回 num1num2乘积,它们的乘积也表示为字符串形式

示例 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 传送门

这里不贴题了,leetcode打开就行,题目大意:

给你一个正整数 n ,生成一个包含 1n^2 所有元素,且元素按顺时针顺序螺旋排列n x n 正方形矩阵 matrix

image.png 示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

基本思路

我们之前做过螺旋矩阵I, 可以先回顾一下,思路是相通的。

  1. 构建 n * n 的矩阵
  2. 边界划分,定下四个角的坐标
  3. 按照边界范围,从左上角开始,一圈一圈走格子就行了,每走一步 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,我看到就通过,加了之后我会尽我所能帮你,但是注意提问方式,建议先看这篇文章:提问的智慧

参考