全排列算法递归实现(Permutations)
来源:互联网 发布:app数据分析网站 编辑:程序博客网 时间:2024/04/26 23:46
题目解释
全排列(Permutations),对输入的字符排列出所有可能的组合。例如,输入“123”,输出:
123
132
213
231
321
312
题目思路
输入一个字符,直接输出就好;输入两个字符,轮流先输出其中一个字符再输出另一个;输入三个字符,轮流输出其中两个字符再输出另外一个字符;……
由此可以发现,当n > 1时,我们输入n个字符的时候,可以轮流输出其中n-1个字符再输出剩下的那个字符,也就是n个字符的全排列是建立在n-1个字符全排列的基础上。
显然,选择递归实现是最省心实惠的好办法。
具体代码
void swap(char *a, char *b) { int t = *a; *a = *b; *b = t;}void permutation(char *a, int first, int last) { if (first == last) { // 一位数字,直接输出 for (int i = 0; i <= last; i++) { printf("%c", a[i]); } putchar('\n'); } else { // 从头遍历所有的字符 for (int i = first; i <= last; i++) { // 交换成为第一个字符 swap(&a[i], &a[first]); permutation(a, first + 1, last); swap(&a[i], &a[first]); } }}
测试代码
#include <stdio.h>void test() { printf("---test1---\n"); char str1[] = "1"; permutation(str1, 0, 0); printf("---test2---\n"); char str2[] = "12"; permutation(str2, 0, 1); printf("---test3---\n"); char str3[] = "123"; permutation(str3, 0, 2); printf("---test4---\n"); char str4[] = "1234"; permutation(str4, 0, 3); printf("---test5---\n"); char str5[] = "1234567"; permutation(str5, 0, 6); printf("Done!\n");}int main() { test();}
本文参考自博客:全排列算法及实现
阅读全文
0 0
- 全排列算法递归实现(Permutations)
- LeetCode:Permutations(全排列算法的递归与非递归实现)
- 46 - Permutations(全排列和递归)
- 全排列算法递归实现(可重集)
- 递归算法实现全排列
- 全排列算法递归实现
- 【算法】递归实现全排列
- 全排列--递归算法实现
- 递归算法实现全排列
- 递归算法实现全排列
- 全排列递归实现算法
- Permutations 全排列生成算法
- 全排列算法(递归)
- 全排列算法(递归)
- leetcode 46. Permutations 全排列问题+递归
- 全排列算法递归实现(笔试题)
- 全排列(Perm)的递归实现算法
- 算法——全排列递归实现
- 整理几款实用javascript富文本编辑器
- Android开发实现QQ登陆并获取信息、分享消息到QQ
- QQ空间"说说"分析 Python
- 2017第二十届中国北京国际科技产业博览会会刊(参展商名录)
- 利用自适应阈值法提取线结构光中心
- 全排列算法递归实现(Permutations)
- kd树c++实现
- 租房
- G: Query on a string
- 图论小知识
- python学习第一天
- 4G虚拟内存图
- numpy.tile¶
- va_list和syslog的使用