【面试题】:全排列

来源:互联网 发布:财务自由知乎 编辑:程序博客网 时间:2024/05/17 06:58

前言

全排列问题网上一搜一大堆,我这里也是写的中规中举,没有什么出彩的地方。

这里只是告诉大家,全排列见人见智,首先自己多想想肯定是好的,然后自己试着编码也是挺好的。

全排列有递归和非递归两种解决方案,我这里用的是递归的方法,递归的调用就是一个排列后面的所有数都和这个数进行交换

思路

如上,递归难懂,需要自己多想想

代码

#include <iostream>using namespace std;void swap(char *a,char *b){    char t = *a;    *a = *b;    *b = t;}void allrange(char *pszstr,int k,int m){    if(k==m){        static int s_i=1;        cout<<s_i++<<"个排列"<<pszstr<<endl;    }    else{        for(int i=k;i<=m;i++){            swap(pszstr+k,pszstr+i);            allrange(pszstr,k+1,m); //把数后移            swap(pszstr+k,pszstr+i);        }    }}int main(){    cout<<"     全排列的递归实现"<<endl;    char str[] = "abcdef";    cout<<str<<"的全排列如下"<<endl;    allrange(str,0,strlen(str)-1);}

运行截图

这里写图片描述

通过高中数学的方法这里我们也能知道,全排列的所有计数是 720种,所以是对的

0 0
原创粉丝点击