一道递归思想的排列组合题目
来源:互联网 发布:淘宝店铺横幅尺寸 编辑:程序博客网 时间:2024/05/20 09:47
题目原题:任意数字序列“12345678”之类,输出它们所有的排列组合
这道题目对于学习递归还是挺不错的,可以借鉴一下
要注意的是:
public Object remove()
作用是移除LinkedList对象的第一个元素..
返回的是被移除的那个元素.
public Object remove(int index);
作用是移除LinkedList对象中索引号为index的元素..
返回的是被移除的那个元素.
public boolean remove(Object o)
作用是移除LinkedList对象中值为o的元素..
移除成功返回true,否则返回false
也就是说在代码中的tmp.remove(i)),其用意是删除tem[i]的同时并获取到它的值
且因为list是有顺序的,所以在删除对象之后,排在其后的对象下标都减1,保持了序列的连贯。
除了主方法比较难理解一点,其余的代码应该都不难,多看几遍就懂了。
代码如下:
import java.util.Arrays;import java.util.LinkedList;import java.util.List;public class Test { //待排列的字符串。 static String toBeArranged ="12345678"; //将其转换成字符数组。 static String[] array =stringToStringArray(toBeArranged); //字符串长度。 static int length=array.length; //存放数组时计数。 static int k=0; //result是存储计算结果的数组,其大小为length的阶乘。 static String[] result=new String[total(length)]; //主函数,调用方法并输出结果 public static void main(String[] args) { //调用主要方法 listAll(Arrays.asList(array), ""); //输出 System.out.println(Arrays.toString(result)); } //主要的计算方法。 public static void listAll(List candidate, String prefix) { if(prefix.length()==length) //小于字符串长度的组合忽略。 { result[k++]=prefix; //存放数组里。 } for(int i=0;i<candidate.size();i++) { List tmp = new LinkedList(candidate); { listAll(tmp, prefix + tmp.remove(i)); //函数中的参数从右边开始解析 } } } //将字符串转成数组。 static String[] stringToStringArray(String s) { int length=s.length(); if(length<=0) { return new String[0]; } String[] result=new String[length]; for(int i=0;i<length;i++) { result[i]=""+s.charAt(i); } return result; } //计算number阶乘,为结果数组的容量。 static int total(int number) { int number1=1; for(int i=1;i<=number;i++) { number1*=i; } return number1; } }
1 0
- 一道递归思想的排列组合题目
- 递归的思想生成排列组合
- 一道考递归的题目
- 一道考察递归思想的面试题
- 一道迷宫题目的非递归解法
- dfs 递归思想 解决排列组合的一些基础问题
- 以另一种位图的思想来解决一道OJ题目
- 排列组合的题目
- 排列组合的递归算法
- 排列组合的递归实现
- 排列组合的递归
- 初探“递归”——由一道题目引出的问题
- 动态规划思想:一道ACM题目
- 排列组合算法的递归实现
- 递归—排列组合的实现
- 算法——递归思想解决排列组合问题
- 一道有趣的题目
- 一道用递规做的题目
- 类的加载、链接、初始化
- 多个div平分一个div的宽度
- at org.springframework.asm.ClassReader.<init>(Unknown Source)
- Android线程与线程池(一)
- 安卓获取屏幕大小
- 一道递归思想的排列组合题目
- 几个实用的ObjectARX插件
- Dev 控件imageComboBoxEdit 添加图片
- IOS 动态添加方法
- 求两个数字之和(c++)
- 精选30道Java笔试题解答
- github常用命令
- IOS的文件系统
- js实现一个自定义的滚动条