Given a collection of numbers, return all possible permutations.
For example,[1,2,3]
have the following permutations:[1,2,3]
, [1,3,2]
, [2,1,3]
, [2,3,1]
, [3,1,2]
, and [3,2,1]
.
题目解析:
求出全排列,递归的时候,将第一个元素与后面的某一个i交换,对后面的整体递归,然后再和i交换回来,对i+1交换,再对后面整体递归!
递归的时候,就要有个出口,这就是
if(k == n){
Print(arr,n);
return ;
}
这段代码的原因。对递归还是不熟练,一开始竟然忘了要写出口条件。
void Permut(int arr[],int k,int n)
{
if(k == n){
Print(arr,n);
return ;
}
for(int i = k;i < n;i++){
Swap(&arr[k],&arr[i]);
Permut(arr,k+1,n);
Swap(&arr[k],&arr[i]);
}
}