剑指offer:字符串的排列
2016-03-08 19:50
525 查看
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 输入描述:
输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。
class Solution { public: vector<string> Permutation(string str) { vector<string> strVec; if (str.size() == 0){ return strVec; } Permutation(str, 0, strVec); sort(strVec.begin(), strVec.end()); return strVec; } //字符串的排列,先选择第一个位置的字母,第一个位置的字母选定以后,再对字符串中剩余的其他字母排序 //一开始我的想法是不在原先字符串上操作,新建一个新的字符串作为排序后的字符串,但是这样比较复杂,感觉 //没有思路进行下去 //剑指offer上给出的思路:采用递归的方法,并且可以直接在原先的字符串上进行操作 //1、先选定排序结果字符串第一位置上的字符,方法是分别拿字符串第一个位置上的字符与其它位置上的字符交换位置 //2、再对第一个位置后面的字符进行排序(又是字符串的排序,递归)。 //递归的出口:如果待排序字符串的长度为1,则递归结束,说明得到了一个字符串的排序 void Permutation(string &str, size_t begin, vector<string> &strVec){ if (begin == str.size() - 1){ strVec.push_back(str); return; } for (size_t i = begin; i <= str.size() - 1; i++){ if (i != begin && str[i] == str[begin]) { continue; } if (str[begin] != str[i]){ char temp = str[begin]; str[begin] = str[i]; str[i] = temp; } Permutation(str, begin + 1, strVec); //恢复排序前字符串的状态进行下一轮的排序 char temp = str[begin]; str[begin] = str[i]; str[i] = temp; } return; } };
相关文章推荐
- 创建一个自己的动态HTML-备
- Jquery使用ajax以及angularjs 动态模板加载并进行渲染
- jsp与servlet的传值问题
- Web前端开发-9
- JavaScript学习笔记
- javascript中的AJAX
- javascript:数值类型null和undefined
- 第 2 章 数组
- LeetCode : Reverse Nodes in k-Group [java]
- [RxJS] Reactive Programming - New requests from refresh clicks -- merge()
- EXTJS 中 radiogroup 的各项所占的宽度不同的解决办法
- CSS之Win8界面摸拟
- infinite scroll和masonry实现的json类型瀑布流
- 未优化的dijsktra(参考YSQ)
- 【一起学AngularJS】第四章、Angular模版技术
- Extjs RadioGroup中Radio的切换
- angular.element方法汇总以及AngularJS 动态添加元素和删除元素
- 【一起学AngularJS】第三章、静态模版
- js 检索和改变文档的样式
- js事件处理函数中return的作用