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]
.
C++:
class Solution {
public:
vector<vector<int> > arr;
void dfs(vector<int> &num, int i, int n) {
int j, tmp;
if(i == n) arr.push_back(num);
for(j = i; j < n; j++) {
tmp = num[i];
num[i] = num[j];
num[j] = tmp;
//printf("pre:i:%d, j:%d\n", i, j);
dfs(num, i + 1, n);
//printf("after:i:%d, j:%d\n", i, j);
tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
}
vector<vector<int> > permute(vector<int> &num) {
dfs(num, 0, num.size());
return arr;
}
};
#include<stdio.h>
#include<stdlib.h>
#define N 3
int arr[100][N];
static int index = 0;
void outprint(int A[], int n) {
int i;
for(i = 0; i < n; i++) {
arr[index][i] = A[i];
printf("%d ", arr[index][i]);
}
printf("\n");
}
void dfs(int A[], int i, int n) {
int j, tmp;
if(i == n) outprint(A, n);
for(j = i; j < n; j++) {
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
//printf("pre:i:%d, j:%d\n", i, j);
dfs(A, i + 1, n);
//printf("after:i:%d, j:%d\n", i, j);
tmp = A[i];
A[i] = A[j];
A[j] = tmp;
}
}
void permute(int A[], int n) {
dfs(A, 0, n);
}
void main() {
int A[] = {1, 2, 3};
permute(A, 3);
}