首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript高级程序设计》笔记
    • TypeScript
    • 小程序笔记
    • JS设计模式总结
  • 网络

    • 网络初探
    • http状态码
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实战例子
  • 实用技巧
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Arthas

划水工程师
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript高级程序设计》笔记
    • TypeScript
    • 小程序笔记
    • JS设计模式总结
  • 网络

    • 网络初探
    • http状态码
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 学习
  • 面试
  • 心情杂货
  • 实战例子
  • 实用技巧
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 学习

  • 面试

    • 面试问题集锦
    • 笔试题记录
    • 心情杂货

    • 实战例子

    • 实用技巧

    • 更多
    • 面试
    Arthas
    2023-05-23
    目录

    笔试题记录

    # 第1题:不定长二维数组的全排列

    给定任意二维数组,输出所有的排列组合项 比如 [['A','B'], ['a','b'], [1, 2]],输出 ['Aa1','Aa2','Ab1','Ab2','Ba1','Ba2','Bb1','Bb2']

    const comput = (que: any[]) => {
     //获取第一个数组
     let res = que[0];
     // 采用动态规划的方式
     for (let i = 1; i < que.length; i++) {
      const pre = res;
      res = [];
      //将第一个数组与第二个数组结合
      pre.forEach((item: any) => {
       que[i].forEach((curr: any) => {
        res.push(item + curr);
       });
      });
      // 得到的答案再遍历
     }
     return res;
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    # 第2题:两个字符串的删除操作

    每步 可以删除任意一个字符串中的一个字符。

    示例 1: 输入: word1 = "sea", word2 = "eat" 输出: 2 解释: 第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"

    示例 2: 输入: word1 = "leetcode", word2 = "etco" 输出: 4

    提示: 1 <= word1.length, word2.length <= 500 word1 和 word2 只包含小写英文字母

    /**
     * @param {string} word1
     * @param {string} word2
     * @return {number}
     */
    const minDistance = (word1, word2) => {
     let len1 = word1.length,
      len2 = word2.length;
    
     let dp = Array(len1 + 1)
      .fill(0)
      .map(() => Array(len2 + 1).fill(Infinity));
     for (let i = 0; i <= len1; i++) {
      dp[i][0] = i;
     }
    
     for (let j = 0; j <= len2; j++) {
      dp[0][j] = j;
     }
    
     for (let i = 1; i <= len1; i++) {
      for (let j = 1; j <= len2; j++) {
       if (word1[i - 1] === word2[j - 1]) {
        dp[i][j] = dp[i - 1][j - 1];
       } else {
        dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + 2);
       }
      }
     }
     return dp[len1][len2];
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31

    # 第3题:最大数

    给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

    示例 1: 输入:nums = [10,2] 输出:"210"

    示例 2: 输入:nums = [3,30,34,5,9] 输出:"9534330"

    function largestNumber(nums) {
        nums.sort((x, y) => {
            let sx = 10, sy = 10;
            while (sx <= x) {
                sx *= 10;
            }
            while (sy <= y) {
                sy *= 10;
            }
            return (sx * y + x) - ((sy * x + y));
        })
        if (nums[0] === 0) {
            return '0';
        }
        return nums.join('');
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    编辑 (opens new window)
    上次更新: 2023/05/24, 18:14:42
    面试问题集锦
    一个完美主义者的自我救赎

    ← 面试问题集锦 一个完美主义者的自我救赎→

    最近更新
    01
    webpack、vite性能优化
    05-24
    02
    如何超过大多数人
    05-16
    03
    扫码点餐小程序
    04-25
    更多文章>
    Theme by Vdoing | Copyright © 2023-2023 Arthas | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式