不重复字符串的组合

输入 输出
没有重复值的字符串 所有可能的组合值
abc a,b,c,ab,bc,abc

思路

递归的思想。一个字符串的所有组合值包含三种情况:
1. 仅包含首字母
2. 首字母+除首字母外的字符串组合值
3. 除首字母外的字符串组合值

实现

function getCombination(str){if(str.length === 1){return [str]}let arr1 = arguments.callee(str.slice(1));let res1 = arr1.map(x => str[0]+x);let res2 = arguments.callee(str.slice(1));let res3 = [str[0]]return res1.concat(res2,res3);
}console.log(getCombination("abc"));
//["abc", "ac", "ab", "bc", "c", "b", "a"]

不重复字符串的排列

输入 输出
不重复字符串 所有可能的排列值
abc abc,acb,bac,bca,cab,cba

思路

递归。对于ab的排列值,先求出b的排列值,然后将a放置与b之前和b之后,得到ab的排列值。
对于abc的排列值,先求出bc的所有排列值,然后将a放置于后两个数的之前/之中/之后三个位置之一,得到abc的所有排列值。以此类推。

实现

function getPerputation(str){if (str.length == 1) {return [str];}let res = []let arr = arguments.callee(str.slice(1));for(let i = 0;i < arr.length;i++){let partArr = [];for(let j = 0;j < arr[i].length+1;j++){let newStr = arr[i].slice(0,j) + str[0] + arr[i].slice(j);partArr.push(newStr);}res = res.concat(partArr)}return res;
}console.log(getPerputation("abc"));
//["abc", "bac", "bca", "acb", "cab", "cba"]

第二种思路

递归。abc的所有组合值可以分为以下部分:
1. a + 剩余字母组合值;
2. b+ 剩余字母组合值;
3. c+剩余字母组合值;

实现

function getPerputation2(str){if(str.length ==1){return [str];}let res = [];for(let i = 0; i < str.length; i++){let restStr = str.slice(0,i)+str.slice(i+1);let restArr = arguments.callee(restStr);restArr=restArr.map(x => str[i] + x);res = res.concat(restArr);}return res;
}console.log(getPerputation2("abc"));

不重复字符串的排列组合

思路

先求组合值,对每个可能的组合值进行排列

实现

function getComAndPer(str){let comArr = getCombination(str);let res =[]for(let i = 0;i < comArr.length; i++){let perArr = getPerputation(comArr[i]);res = res.concat(perArr);}return res;
}
console.log(getComAndPer("abc"));
//["abc", "bac", "bca", "acb", "cab", "cba", "ac", "ca", "ab", "ba", "bc", "cb", "c", "b", "a"]

可能存在重复元素时

对于可能存在重复的字符串,按照上述方法求排列组合之后的结果可能存在重复值。可以对结果进行去重后再返回。
例如,求aabc的组合值。

function getComWithRepeat(str){let resWithReapeat = getCombination(str);return [...new Set(resWithReapeat)]
}console.log(getComWithRepeat("aac"));
//["aac", "ac", "aa", "c", "a"]

javascript 字符串的排列与组合相关推荐

  1. 无重复字符串的排列组合

    无重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同. 示例1: 输入:S = "qwe" 输出:["qwe", " ...

  2. leetcode面试题 08.08. 有重复字符串的排列组合(回溯)

    有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe" 输出:["eqq","qeq",&q ...

  3. 程序员面试金典 - 面试题 08.07. 无重复字符串的排列组合(回溯)

    1. 题目 无重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同. 示例1:输入:S = "qwe"输出:["qwe", & ...

  4. java字符串字符排列组合_如何在Java中查找字符串的所有排列

    java字符串字符排列组合 In this tutorial, we will learn how to find the permutation of a String in a Java Prog ...

  5. 【亡羊补牢】挑战数据结构与算法 第18期 LeetCode 面试题 08.08. 有重复字符串的排列组合(递归与回溯)

    仰望星空的人,不应该被嘲笑 题目描述 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq", ...

  6. JAVA练习177-有重复字符串的排列组合

    有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1:  输入:S = "qqe"  输出:["eqq","qeq", ...

  7. 面试题 08.08. 有重复字符串的排列组合-快速排序+回溯深度优先搜索

    面试题 08.08. 有重复字符串的排列组合+快速排序加回溯深度优先搜索 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe" 输 ...

  8. 面试题 08.08. 有重复字符串的排列组合

    面试题 08.08. 有重复字符串的排列组合 有重复字符串的排列组合.编写一种方法,计算某字符串的所有排列组合. 示例1: 输入:S = "qqe"输出:["eqq&qu ...

  9. java练习: 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:

    import java.util.ArrayList; import java.util.Scanner;/*** 7. 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:* 原始字 ...

  10. 字符串的全排列和组合算法

    转载http://blog.csdn.net/hackbuteer1/article/details/7462447,感谢Hackbuteer1. 全排列在笔试面试中很热门,因为它难度适中,既可以考察 ...

最新文章

  1. 绝对经典的滑轮新闻显示(javascript+css)实现
  2. mysql锁与程序锁_数据库加锁(转)
  3. Java问题解决:Java compiler level does not match the version of the installed Java project facet....
  4. baidu+app+per+android,百度移动统计|移动应用APP统计|android统计分析|iOS统计分析
  5. UNICODE转多字节
  6. 使用C#开发一个简单的P2P应用
  7. ajax给data赋值,vue 2.0 methods 里ajax生成的数据,怎么赋值给data
  8. var、let 及 const 区别
  9. LeetCode 85. 最大矩形(DP/单调递增栈,难)
  10. RocketMQ核心架构设计思想
  11. Http Module 介绍[转]
  12. 和 jQuery 说再见,Bootstrap 5 将移除对其依赖
  13. AndroidStudio安卓原生开发_Activity的启动模式singleInstance启动模式---Android原生开发工作笔记88
  14. Android JetPack –导航架构
  15. matlab求出拟合曲线的方程,已知数据点,拟合曲线并得到曲线方程。谢谢
  16. 参考文献格式字号字体_论文格式字体字号要求
  17. STM32压力传感器信号采集-24位AD HX720 HX711 原理介绍
  18. 如何画一个算法流图?
  19. python 输出上三角行列式
  20. windows无法连接到user profile service服务。此问题阻止标准用户登录系统

热门文章

  1. 国家AAAAA级旅游景区数量统计
  2. jupyter notebook更换浏览器需要密码问题
  3. html计算梯形的面积,数学教案计算梯形的面积
  4. Lowest Common Ancestor
  5. 毕业设计基于linux下http,Linux下HTTP服务器设计-毕业设计.doc
  6. ceb怎么转换成word_【解决】后缀.ceb文件怎么转换为word文档?
  7. Excel VBA快速去除Excel中的所有公式
  8. asio strand
  9. iOS清理缓存的简单实现
  10. 软件测试面试如何正确谈论薪资?