1. 程式人生 > 實用技巧 >8.24 JDBC 呼叫儲存過程

8.24 JDBC 呼叫儲存過程

46. 全排列

給定一個 沒有重複 數字的序列,返回其所有可能的全排列。

示例:

  輸入: [1,2,3]
  輸出:
  [
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
  ]

全排列:

排列的定義:從n個不同元素中,任取m(m≤n,m與n均為自然數,下同)個元素按照一定的順序排成一列,叫做從n個不同元素中取出m個元素的一個排列;從n個不同元素中取出m(m≤n)個元素的所有排列的個數,叫做從n個不同元素中取出m個元素的排列數,用符號 A(n,m)表示。

組合:

組合的定義:從n個不同元素中,任取m(m≤n)個元素併成一組,叫做從n個不同元素中取出m個元素的一個組合;從n個不同元素中取出m(m≤n)個元素的所有組合的個數,叫做從n個不同元素中取出m個元素的組合數。用符號 C(n,m) 表示。

計算公式:

  C(n,m)=C(n,n-m)。(n≥m)

程式碼:

#include<iostream>
#include<bits/stdc++.h>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
void Perm(int list[],int k,int m){
    //list 陣列存放排列的數,K表示層 代表第幾個數,m表示陣列的長度
    if(k==m){
        //K==m 表示到達最後一個數,不能再交換,最終的排列的數需要輸出;
for (int i = 0; i <= m; i++) { cout<<list[i]<<" "; } cout<<endl; }else { for (int i = k; i <= m; i++) { swap(list[i],list[k]); Perm(list,k+1,m); swap(list[i],list[k]); } } }
int main () { int list[]={1,2,3}; Perm(list,0,2); }

輸出:

1 2 3 
1 3 2
2 1 3
2 3 1
3 2 1
3 1 2

  1. //list 陣列存放排列的數,K表示層 代表第幾個數,m表示陣列的長度