字符串的排列

题目描述

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

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


思路

  1. 递归思想:把大问题转换为若干小问题;
  2. n个元素的全排列 = (n-1) 个元素全排列 + 一个元素作为前缀。
  3. 递归的出口:只有一个元素的全排列,此时排序完成,输出数组。
  4. 遍历字符串,将每个字符放在第一个元素作为前缀,并将其余元素继续全排列。
  5. 新建一个isRepeat空对象,用来判断字符是否重复,若重复则跳过排序。

实现代码

function Permutation(str) {
var result = [];
if (str.length <= 0) {
return [];
}
var sortTemp= "";
var arr = str.split("");
result = sortString(arr, sortTemp, []);
return result;
} function sortString(arr, sortTemp, res) {
if (arr.length == 0) {
res.push(sortTemp);
} else {
var isRepeat = {};
for (var i = 0; i < arr.length; i++) {
if (!isRepeat[arr[i]]) {
var temp = arr.splice(i, 1)[0]; // 取出第i个字符
sortTemp+= temp; // 第i个字符设为前缀
sortString(arr, sortTemp, res);
arr.splice(i, 0, temp); // 补全取出的元素,恢复原字符串
sortTemp= sortTemp.slice(0, sortTemp.length - 1); // 清空sortTemp
isRepeat[temp] = true;
}
}
}
return res;
}

最新文章

  1. MongoDB 搭建分片集群
  2. PHP浅复制与深复制
  3. windows 开机启动 CassiniDev(IIS替代软件)
  4. c++11编码规范 NULL还是nullptr
  5. PCA的数学原理
  6. 【Mongodb】---Scheme和Collections对应问题
  7. DEM渲染洼地淹没图(转)
  8. css3动画使用技巧之——transform-delay为负值时的应用。
  9. Django 2.0 新特性 抢先看!
  10. Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: &#39;L
  11. 不能为虚拟电脑 ubuntu 打开一个新任务.
  12. Element-ui使用技巧
  13. LODOOP中的各种边距 打印项、整体偏移、可打区域、内部边距
  14. java设计模式-----12、外观模式
  15. 【docker】docker限制日志文件大小的方法+查看日志文件的方法
  16. 【Python基础】*args,**args的详细用法
  17. AFNetworking网络请求数据
  18. UWP 取消GridView、ListView鼠标选中、悬停效果
  19. [转]F5负载均衡算法及基本原理
  20. Java编程中获取键盘输入实现方法及注意事项

热门文章

  1. 12、JAVA内存模型与线程
  2. matplotlib 雷达图2
  3. mysql提示Fatal error: Can&#39;t open and lock privilege tables: Table &#39;mysql.host&#39; doesn&#39;t exist解决方法
  4. 利用fiddler core api 拦截修改 websocket 数据
  5. 【RDB】MariaDB 之事务、复制、集群
  6. docker之镜像管理命令
  7. Nginx安装负载均衡配置 fair check扩展
  8. 利用HOG+SVM实现行人检测
  9. PHP Laravel 连接并访问数据库
  10. Linux内核分析——第一周学习笔记