利用回溯解决子集II遇到的二维数组去重问题

子集问题最后返回的结果是二维数组

  • 🤔,[] !== [];{}!=={};2===2,为什么捏?
  • [] 与 [] 存储的内存地址不同,所以 !==
  • 一维数组的去重方法在二维数组这里是不适用的

1-1 可以去重的方法:

  <script>
      var duplicate = function (arr) {
        // 法一:es6
        let res = new Map();
        arr.forEach((item) => {
          item.sort((a, b) => a - b);
          res.set(item.join(), item);
        });
        return Array.from(res.values());

        // 法二:
        // let res = {};
        // arr.forEach((item) => {
        //   item.sort((a, b) => a - b);
        //   res[item] = item;
        // });
        // return Object.values(res);
      };
      const arr = [
        [1, 2, 3, 4, 5, 6, 7, 8, 9],
        [1, 2, 3, 4, 5, 6, 7, 8, 9],
        [2, 3, 4, 5],
        [6, 6, 6, 6],
      ];

      console.log(duplicate(arr));
    </script>

在这里插入图片描述

1-2 通过控制台测试不可以去重的方法[一维数组的去重方法]:

  1. console.log([[1],[2],[3]].includes([1])) // false

    • includes去重不能使用
  2. [] === [] // false

    • 两个for嵌套后splice不能使用
  3. console.log([[1],[2],[3]].indexOf([1])) // -1

    • indexOf去重不能使用
  4. (...new Set([],[])) // [[],[]]

    • 利用set与map的has去重也不可行
  5. in运算符惊到了我了!!!


console.log([1] in [[1],[2],[3]])         // true
console.log([1,2] in [[1,2],[2]])        // false???,玩啥呢,整蒙了 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值