分享一道某大厂的算法笔试题

分享一道某大厂的算法笔试题


一道生成sku的算法题, 限时30分钟,有空的话可以试试看,就当摸鱼的时候练练手

// 已知数据:
const goods= '鞋子';
const specList = [
  ['运动鞋', '休闲鞋'],
  ['36码', '45码'],
  ['红色', '蓝色'],
  ['高帮', '低帮'],
]

/** 
  要求输出结果:
鞋子-运动鞋-36码-红色-高帮
鞋子-运动鞋-36码-红色-低帮
鞋子-运动鞋-36码-蓝色-高帮
鞋子-运动鞋-36码-蓝色-低帮
鞋子-运动鞋-45码-红色-高帮
鞋子-运动鞋-45码-红色-低帮
鞋子-运动鞋-45码-蓝色-高帮
鞋子-运动鞋-45码-蓝色-低帮
鞋子-休闲鞋-36码-红色-高帮
鞋子-休闲鞋-36码-红色-低帮
鞋子-休闲鞋-36码-蓝色-高帮
鞋子-休闲鞋-36码-蓝色-低帮
鞋子-休闲鞋-45码-红色-高帮
鞋子-休闲鞋-45码-红色-低帮
鞋子-休闲鞋-45码-蓝色-高帮
鞋子-休闲鞋-45码-蓝色-低帮
*/

限时30分钟,敲码吧骚年
。。。
。。。
。。。
。。。
。。。

下面是我个人当时看到这个题的思路和实现逻辑:

  // 判断是否是非空数组
  function onCheckArray(list) {
    if (list && Object.prototype.toString.call(list) === '[object Array]' && list.length > 0) {
      return true
    }
    return false
  }
  
  // 获取规格
  function onGetSku(list, specStr) {
    // 判断list是否是非空数组
    if (onCheckArray(list)) {
      const listLength = list.length
      const currentItem = list[0] // 当前项
      const nextItem = list[1] // 下一项
      // 判断下一项是否还是数组,是的话截取数组当前项后面的继续递归
      if (onCheckArray(nextItem)) {
        currentItem.forEach((item) => {
          onGetSku(list.slice(1, listLength), `${specStr}-${item}`)
        })
      } else {
        // 没有下一项的话,就拿当前项进行输出
        currentItem.forEach((item) => {
          console.log(`${specStr}-${item}`)
        })
      }
    } else {
      return specStr
    }
  }
  onGetSku(specList, goods)

主要思路,是判断数组下一项是否还是数组,是的话截取数组当前项后面的所有项继续递归
欢迎各位大佬提供新思路,互相借鉴学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值