剑指OFFER之字符串的排列(九度OJ1369)
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)相关推荐
- 【LeetCode】剑指 Offer 38. 字符串的排列
[LeetCode]剑指 Offer 38. 字符串的排列 文章目录 [LeetCode]剑指 Offer 38. 字符串的排列 package offer;import java.util.Hash ...
- ++递归 字符串全排列_剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" ...
- LeetCode——剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列 题目 输入一个字符串,打印出该字符串中字符的所有排列.你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.示例:输入:s = "abc" ...
- 剑指 Offer 38. 字符串的排列
import java.util.ArrayList; import java.util.HashSet; import java.util.List;/*** 剑指 Offer 38. 字符串的排列 ...
- 【击败时间100%】剑指 Offer 38. 字符串的排列
立志用最少的代码做最高效的表达 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输出 ...
- 剑指Offer之字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述 输入 ...
- [剑指offer] 27. 字符串的排列
题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输 ...
- 《剑指offer》字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入一 ...
- 【剑指offer】字符串的排列
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26390551 题目描写叙述: 输入一个字符串,按字典序打印出该字符串中字符的全部排列. 比 ...
最新文章
- nginx linux 安装
- 网页自适应和响应式的区别与分析总结
- Centos 6.9 Kick Start 无人值守安装
- 如何在程序中不用加号实现加法_程序员那些事 | JavaScript基础(六)
- Java容器Stack
- BZOJ3038 上帝造题的七分钟2
- 西门子PLC控制器家族产品汇总
- 【C语言取反运算符】~2是多少?~-5是多少?
- 基于ATTiny85的digispark Arduino最小系统的自制教程(二)
- 奇偶性与魔术(一)——奇偶性的数学本质
- 轻体重者入门跑鞋选购全攻略(包括跑姿分析及跑鞋推荐)
- pytorch指定版本更新
- 适配7.0手机拍照、相册、裁剪图片
- 中衍期货开户|资深老师盘中交流
- 树莓派安装宝塔Linux面板教程
- 教大家如何利用电脑发射wifi信号 供其他设备免费高速上网!
- 文件服务器fuse,FUSE 扩展
- 程序员代码对比工具,就用这7个
- 爬取CSDN官方博客粉丝中码龄20年以上的用户数量
- Edge浏览器打开csdn无法使用搜索