2019独角兽企业重金招聘Python工程师标准>>>

题目描述:

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入:

每个测试案例包括1行。

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

输出:

对应每组数据,按字典序输出所有排列。

样例输入:
abc
BCA

样例输出:
abc
acb
bac
bca
cab
cba
ABC
ACB
BAC
BCA
CAB
CBA

解题思路:

  这道题要注意两个问题:

  第一个是重复字母,第二个是按字典顺序

  重复字母我们在进行交换的时候直接跳过就可以了,按字典顺序,这个就需要我们进行排列了。

  排列使用冒泡排序:

void bubbleSort(char *arr,int begin,int length){int i,j;for(i=begin;i<length;i++){for(j=i+1;j<length;j++){if(arr[i]>arr[j]){swap(&arr[i],&arr[j]);}}}
}

  进行交换时,注意忽略掉重复的字符交换:

void Permulation(char *arr,int k,int length){int i;if(k == length){for(i=0;i<length;i++)printf("%c",arr[i]);printf("\n");}else{for(i=k;i<length;i++){if(k != i && arr[k] == arr[i])continue;swap(&arr[k],&arr[i]);bubbleSort(arr,k+1,length);Permulation(arr,k+1,length);bubbleSort(arr,k+1,length);}}
}

  每次在进行交换后,都把剩余的元素进行一次排列。比如字符串abc,在进行最后一次外层交换时变成 cba。

  此时要进行一次排序,交换cab后,在进行排列。

全部代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubbleSort(char *arr,int begin,int length);
void swap(char *a,char *b);
void Permulation(char *arr,int k,int length);int main(){char arr[10];int length;int i;while(gets(arr)){length = strlen(arr);bubbleSort(arr,0,length);Permulation(arr,0,length);}return 0;
}
void Permulation(char *arr,int k,int length){int i;if(k == length){for(i=0;i<length;i++)printf("%c",arr[i]);printf("\n");}else{for(i=k;i<length;i++){if(k != i && arr[k] == arr[i])continue;swap(&arr[k],&arr[i]);bubbleSort(arr,k+1,length);Permulation(arr,k+1,length);bubbleSort(arr,k+1,length);}}
}
void swap(char *a,char *b){char c;c = *b;*b = *a;*a = c;
}
void bubbleSort(char *arr,int begin,int length){int i,j;for(i=begin;i<length;i++){for(j=i+1;j<length;j++){if(arr[i]>arr[j]){swap(&arr[i],&arr[j]);}}}
}
/**************************************************************Problem: 1369User: xhaloLanguage: CResult: AcceptedTime:470 msMemory:912 kb
****************************************************************/

转载于:https://my.oschina.net/u/204616/blog/545462

剑指OFFER之字符串的排列(九度OJ1369)相关推荐

  1. 【LeetCode】剑指 Offer 38. 字符串的排列

    [LeetCode]剑指 Offer 38. 字符串的排列 文章目录 [LeetCode]剑指 Offer 38. 字符串的排列 package offer;import java.util.Hash ...

  2. ++递归 字符串全排列_剑指 Offer 38. 字符串的排列

    剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" ...

  3. LeetCode——剑指 Offer 38. 字符串的排列

    剑指 Offer 38. 字符串的排列 题目 输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.示例:输入:s = "abc" ...

  4. 剑指 Offer 38. 字符串的排列

    import java.util.ArrayList; import java.util.HashSet; import java.util.List;/*** 剑指 Offer 38. 字符串的排列 ...

  5. 【击败时间100%】剑指 Offer 38. 字符串的排列

    立志用最少的代码做最高效的表达 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输出 ...

  6. 剑指Offer之字符串的排列

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述 输入 ...

  7. [剑指offer] 27. 字符串的排列

    题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...

  8. 《剑指offer》字符串的排列

    题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入一 ...

  9. 【剑指offer】字符串的排列

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26390551 题目描写叙述: 输入一个字符串,按字典序打印出该字符串中字符的全部排列. 比 ...

最新文章

  1. nginx linux 安装
  2. 网页自适应和响应式的区别与分析总结
  3. Centos 6.9 Kick Start 无人值守安装
  4. 如何在程序中不用加号实现加法_程序员那些事 | JavaScript基础(六)
  5. Java容器Stack
  6. BZOJ3038 上帝造题的七分钟2
  7. 西门子PLC控制器家族产品汇总
  8. 【C语言取反运算符】~2是多少?~-5是多少?
  9. 基于ATTiny85的digispark Arduino最小系统的自制教程(二)
  10. 奇偶性与魔术(一)——奇偶性的数学本质
  11. 轻体重者入门跑鞋选购全攻略(包括跑姿分析及跑鞋推荐)
  12. pytorch指定版本更新
  13. 适配7.0手机拍照、相册、裁剪图片
  14. 中衍期货开户|资深老师盘中交流
  15. 树莓派安装宝塔Linux面板教程
  16. 教大家如何利用电脑发射wifi信号 供其他设备免费高速上网!
  17. 文件服务器fuse,FUSE 扩展
  18. 程序员代码对比工具,就用这7个
  19. 爬取CSDN官方博客粉丝中码龄20年以上的用户数量
  20. Edge浏览器打开csdn无法使用搜索

热门文章

  1. 整数点与Pick定理
  2. 增加数据库控制文件命令
  3. JavaScript操作DOM对象
  4. Android 如何将Canvas上绘制的内容保存成本地图片
  5. ELK技术栈—Kibana
  6. SDNU 1085.爬楼梯再加强版(矩阵快速幂)
  7. Spring学习(三)--Spring的IOC
  8. CISP-PTE注册信息安全专业人员渗透测试工程师知识体系大纲
  9. #define const typedef
  10. 正则表达式 非捕获性分组