剑指offer 实现数组的全排列

来源:互联网 发布:阿里云 rds sql审计 编辑:程序博客网 时间:2024/06/01 21:08

思路:

递归实现:

    交换元素->递归->交换元素。递归到数组末尾是打印所有元素,所以得记住数组头。

#include <stdio.h>void printAll(int a[], int n);void printInt(int a[], int n);int *g;int num;int main(int argc, char *argv[]){int a[] = {1,2,3};g = a;num = sizeof(a)/sizeof(int);printAll(a, num);return 0;}void printAll(int a[], int n) {if(a == NULL)return;if(n<0)return;if(n==0) {printInt(g, num);return;}int i;for(i=0 ; i<n ; i++) {int t = a[0];a[0] = a[i];a[i] = t;printAll(a+1, n-1);t = a[0];//!!必须要换回来 a[0] = a[i];a[i] = t;}}void printInt(int a[], int n) {int i;for(i=0; i<n ; i++) {printf("%d\t",a[i]);}printf("\n");}


0 0
原创粉丝点击