字符串全排列问题
2009-04-26 11:19
218 查看
分析:采用迭代法进行求解
当字符串有两个元素ab,除了本身ab,再交换最后一位和最后二位,得到ba。
当字符串有三个元素abc时得到abc,acb, bac,bca,cba,cab。
算法:用start和end标记字符串开头和结尾
1,如果开头和结尾相等,则输出串,迭代终止。
2,从字符串开头开始遍历每一个字符,与开头字符串交换。
3,对新串迭代执行本程序,开头标记加1。
当字符串有两个元素ab,除了本身ab,再交换最后一位和最后二位,得到ba。
当字符串有三个元素abc时得到abc,acb, bac,bca,cba,cab。
算法:用start和end标记字符串开头和结尾
1,如果开头和结尾相等,则输出串,迭代终止。
2,从字符串开头开始遍历每一个字符,与开头字符串交换。
3,对新串迭代执行本程序,开头标记加1。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> static void arrange(char *s, int start, int end); int main(int argc, char **argv) { if (argc != 2) { printf("usage: ./allrange <string>/n"); exit(EXIT_FAILURE); } arrange(argv[1], 0, strlen(argv[1])); exit(EXIT_SUCCESS); } static void arrange(char *s, int start, int end) { int i; char tmp; if (start == end) { printf("%s/n", s); } else { for (i = start; i < end; i++) { tmp = s[start]; s[start] = s[i]; s[i] = tmp; arrange(s, start + 1, end); tmp = s[start]; s[start] = s[i]; s[i] = tmp; } } }
相关文章推荐
- 字符串的全排列问题(一)——无重复出现字符的排列
- 字符串全排列问题分析
- 算法-字符串全排列问题
- 使用C语言解决字符串全排列问题
- 字符串 全排列生成问题
- 字符串全排列问题
- 含重复字符的字符串的全排列问题(Java)
- 字符串全排列问题
- 字符串的全排列问题
- 字符串全排列问题
- 递归解决输出一个字符串的全排列问题(缺陷:没有考虑字符串中字符重复的问题)
- 字符串全排列问题
- LeetCode—**字符串中数字的全排列问题Permutations
- 字符串全排列问题(递归算法)
- 有关字符串的全排列,组合 等问题
- 字符串全排列问题
- 字符串的全排列问题的解决方法
- <转载>字符串 全排列生成问题
- 算法习题53:字符串全排列问题
- 字符串全排列问题(递归解决有重复字符问题)