给定一系列数字,请打印出这些数字的所有排列,例如1,2,2,3,4,请列出所有的排列
来源:互联网 发布:centos pptp 客户端 编辑:程序博客网 时间:2024/06/05 23:50
今天看书,看到了一道题目,就是:
给定一系列数字,例如1,2,2,3,4,请列出这系列数字的所有排列。
这道题目实际上很有意思,因为如果给出这样的一系列的数字1,2,3,4,就是各个数字都不一样,这样的排列就很好列出了,我们可以逐个遍历,我们可以从简单的算起,首先我们列出具有不同的字符序列的所有排列:
1、开始的时候,是这样1234,先将1固定住,则后面的234在代入进去,称为一个新的字符串参加递归,则得到的就是以1开头的所有排列的字符串
2、同样的234,现将2固定住,则后面的34作为一个新的字符串参加递归,则得到以12开头的所有排列的字符串1234 1243
3、对于34,将3固定住,则只有34一种排列。
上面的以1 为前缀的知识排列的一种,接下来
4、如下面的程序我们可以看出 body = body.substring(1) + body.substring(0, 1);
则是将1234编程2341,重新进行递归,则此时就是将2作为前缀继续递归,则能求出以2 为前缀的所有排列
5、下面分别对3 4 作为前缀继续递归,则能求出所有的排列。
因为递归的此数就是body字符串的长度,所以我们刚好可以将所有的字符串放在首位作为前缀递归。
下面是具有不同的字符序列的所有排列的源代码:
package programmer;public class PreKinds {public static int count = 0;public void preKinds(String body, String prefix) {if (body.length() < 1) {System.out.println(prefix);count++;} else {// int[] index = new int[body.length()];// for (int i = 0; i < body.length(); i++)// index[i] = body.indexOf(body.charAt(i));for (int i = 0; i < body.length(); i++) {// if (i == index[i])preKinds(body.substring(1), prefix + body.substring(0, 1)); //这儿就是实现将前缀先固定住的方法body = body.substring(1) + body.substring(0, 1);//这儿可以实现将2、3、4分别放在最前面作为前缀的一部分}}}public static void main(String[] args) {String body = "1234";new PreKinds().preKinds(body, "");System.out.println(count);}}
下面是具有相同的字符序列的所有排列的源代码:
package programmer;public class PreKinds {public static int count = 0;public void preKinds(String body, String prefix) {if (body.length() < 1) {System.out.println(prefix);count++;} else {int[] index = new int[body.length()];for (int i = 0; i < body.length(); i++)index[i] = body.indexOf(body.charAt(i)); //这里将每个字符第一次出现的位置放在index数组中for (int i = 0; i < body.length(); i++) {if (i == index[i]) //判断,如果有相同的字符,则index[i]与i一定不相等preKinds(body.substring(1), prefix + body.substring(0, 1));body = body.substring(1) + body.substring(0, 1);}}}public static void main(String[] args) {String body = "12234";new PreKinds().preKinds(body, "");System.out.println(count);}}
0 0
- 给定一系列数字,请打印出这些数字的所有排列,例如1,2,2,3,4,请列出所有的排列
- 用1、2、2、3、4、5这六个数字,打印出所有不同的排列
- 用1、2、2、3、4、5这六个数字,打印出所有不同的排列,……
- 用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列
- 用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列
- 利用1、2、2、3、4这5个数字,打印出所有不同的排列,不能有重复
- 用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列
- 用 1,2,2,3,4,5 六个数字,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连
- 面试题─用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列
- 2013年用友校招编程题:用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列
- 用1、2、2、3、4、5这六个数字,用java写一个程序,打印出所有不同的排列
- 对一系列数字,打印出所有的不同排序
- 给定不同数字的集合,返回所有可能的排列。
- 编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
- 编写一个能将给定非负整数数组中的数字排列成最大数字的函数。 例如,给定[50,2,1,9],最大数字为95021。
- 算法:打印出所有不同的排列
- 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
- 用1、2、2、3、4、5这六个数字,写一个main函数,打印出所有不同的排列, 如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
- 吃进去的是草,挤出来是奶就叫精华(续)
- 第一次的开始与结果。。无法想想
- 加框网站跟踪代码设置 GA谷歌分析
- Java正则表达式语法
- 排查常见的跟踪设置错误 GA谷歌分析
- 给定一系列数字,请打印出这些数字的所有排列,例如1,2,2,3,4,请列出所有的排列
- FreeMarker模板使用
- MagicalRecord入门教程
- 第一次的开始与结果。。无法想想
- IOS中SAX和DOM解析XML<代码演示>
- 万丈高楼平地起,基础很重要
- 如何处理海量数据
- Windows、Ubuntu双系统重装windows系统后grub引导的修复及默认启动项的修改
- 合并两个已经排序的数组为另一个数组