javascript,排列组合

输入参数 ‘abc',输出所有组合 ['abc','acb','bac','bca','cab','cba']

思路:分为3列,第一列为  a, b,c ;第二列为a,b,c出去第一列选中过后的,比如第一列选了a,第二列就为b,c。以此类推。最终结果为每一列选中的字符串相加(路径)

 

代码:

    function getList(data) {
      let result = []
      list(data)
      return result
      function list(a, data = '') { // a为原始数据,data为不包含此列的路径
        a = [...a] // 数据浅复制
        if (a.length === 1) {
          data += a[0]
          result.push(data) // 当最后一个的时候,把路径push进去
        }
        for (let i = 0; i < a.length; i++) {
          let now = a[i] // 此列选中
          now2 = data // 路径复制,data不可污染,保证此列循环,路径不变
          now2 += now // 从第一列到此列的路径
          let left = a.filter(it => it !== now) // 此列选中剩余的数据
          list(left, now2)
        }
      }
    }
    let data = getList('abcdefg')
    console.log(data)

 

posted @ 2018-08-04 18:46  吃个石头  阅读(618)  评论(0编辑  收藏  举报