前端算法面试题之 - 排列组合

求数组的排列组合

  • 排列

    let data = ['a','b','c','d'];
    
    // 全排列
    function allSort(arr, index = 0, group = []){
      if(index == arr.length) return group;
    
      let temp = [];
      temp.push(arr[index]);
      for(let i = 0; i < group.length; i++) {
          temp.push(group[i] + arr[index])
          temp.push(arr[index] + group[i])
      }
      group = [...group, ...temp]
      return allSort(arr, index+1, group)
    }
    

console.log(allSort(data))


- 全组合

let data = ['a','b','c','d'];

// 全组合 function all(arr, index = 0, group = []) {

if(index == arr.length) return group;

let temp = [];
temp.push(arr[index]);
for(let i = 0; i < group.length; i++) {
    temp.push(group[i] + arr[index])
}
group = [...group, ...temp]
return all(arr, index+1, group)

} console.log(all(data))


- 数组随机组合

var arr = [1,3,4,6,7]; var result = [];

function pick(arr, beginIndex = 0, needCount = 3, subResult = []){ if(needCount == 0) { result.push(subResult) return; } for(var i = beginIndex; i< arr.length; i++) { var num = arr[i]; var temp = [...subResult, num] pick(arr,i+1, needCount-1, temp) } }

pick(arr) console.log(result)

- 求二维数组的每个子元素选一个组成的组合

let arr = [['a','b'],['1','2'],['m','n']];

// 组合 function comb(arr) { let resultArr = [];

function get(array, index = 0, subArr = []) {

    if(!array[index]) {
        resultArr.push(subArr.join(''));
        return;
    };

    array[index].forEach((v, i) => {

        get(array, index + 1, index === 0 ? [v] : [...subArr,v])
    })
}
get(arr);
return resultArr;

}

```