n个数 全排列算法

题目

给定N个数,如[ 1, 2,3,4,5], 获取他的全排列。


经典递归解法 c

核心思路是交换

#include<stdio.h>
void swap(int* a, int* b){
    
    
	int temp = *a;
	*a = *b;
	*b = temp;
}
//int a[] = { 1,2,3,4};
//sort(a, 0, 4);	
void sort(int* a, int k, int m){
    
    
	if (k == m){
    
    
		int i = 0; 
		for (; i < m; i++){
    
    
			printf("%d", a[i]);
		}
	}else{
    
    
		int j = k;
		for (; j < m; j++){
    
    
			swap(&a[k], &a[j]);		
			sort(a, k + 1, m);
			swap(&a[k], &a[j]);
		}
		printf("\n");
	}
} 

上述代码的js版本

let arr = [1, 2, 3, 4];
let res = []

function sort(arr, k) {
    
    
  if (k === arr.length) return res.push(arr);
  for (let a = k; a < arr.length; a++) {
    
    
    let arr1 = [...arr];
    let t = arr1[k];
    arr1[k] = arr1[a];
    arr1[a] = t;
    sort(arr1, k + 1)
  }
}

sort(arr, 0, 4);
console.log(res)
console.log(res.length)

动态规划 DP

有图有真相
排列算法

  function dp(arr) {
    
    
    if (arr.length === 1) {
    
    
      return arr;
    }
    let r = [];
    for (let a = 0; a < arr.length; a++) {
    
    
      let arr1 = [...arr];
      let v = arr1[a];
      arr1.splice(a, 1);
      dp(arr1).forEach(e => {
    
    
        let t = []
        t = t.concat(e, v)
        r.push(t)
      })
    }
    return r;
  }

猜你喜欢

转载自blog.csdn.net/qq_29334605/article/details/106069914