【Java中 任意几个数字获取其所有的排列组合】

今天在工作中碰到一个问题,在java中输入比如1,2,3  三个数 我想要得到其所有的排列组合 比如 123,312,132,231,213,321 这些

上网找了找别人的算法,稍加整理,分享给大家代码如下

  1. import java.util.Arrays;                        //用于数组输出。
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. public class test
  5. {
  6. static String toBeArranged ="123456";                //待排列的字符串。
  7. static String[] array = stringToStringArray(toBeArranged);    //将其转换成数组。{"1","2"...}
  8. static int length=array.length;                    //字符串长度。
  9. static int k=0;                            //存放数组时计数。
  10. static String[] result=new String[total(length)];        //数组大小是length的阶乘。
  11. public static void main(String[] args)
  12. {
  13. listAll(Arrays.asList(array), "");
  14. System.out.println(Arrays.toString(result));        //输出。
  15. }
  16. //主要的计算方法。
  17. public static void listAll(List candidate, String prefix)
    • {
    • if(prefix.length()==length)                //小于字符串长度的组合忽略。
    • {
    • result[k++]=prefix;                //存放数组里。
    • }
    • for(int i=0;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
    • {
    • 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;
    • }
    • }
时间: 2024-08-10 18:06:27

【Java中 任意几个数字获取其所有的排列组合】的相关文章

关于java中任意对象强制转换为接口类型的问题

java中任意对象强转为接口类型都不会有编译错误 public class Apple implements Eatable{ public static void main(String args[]) { Drinkable drinkable = (Drinkable)new Apple(); } } interface Eatable{} interface Drinkable{} java中的类可以多实现接口,Java编译器无法判断该类是否实现了该接口所以不会有编译错误. 但是Java

给出一个数组和一个目标值,如果数组中任意两个数字的加和等于目标值,输出这两个位置

一般的做法(我自己也这样做了哈哈) public int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.length; j++) { if (nums[j] == target - nums[i]) { return new int[] { i, j }; } } } throw new IllegalArgumentExceptio

【JAVA】关于java中 类.class.getResource(&quot;/&quot;).getPath()获取路径有空格的问题

写了一个web工程,在本地测试正确,但是部署到服务器上就出现错误.原因是读取不到配置文件. 后来从打印出来的文件路径中发现是用Java的class.getResource("/").getPath()获取路径的时候,路径中的空格转换成了%20. 在网上查询相关信息,果然将空格转成%20是一个古老的bug,我特意借此记录一下,希望能帮到遇到同样问题的朋友. Bug ID: 4466485 getClass( ).getResource( ).getFile( ) returns file

java中科学计数法数字转字符串

开发过程中有可能会遇到很小的数字,在显示过程中就转换成了科学计数法,这种不利于人的观看,于是就有必要转成字符串形式的.so. 将科学计数法的数字转换成字符串: 使用的是java.math的BigDecimal: BigDecimal bd = new BigDecimal("1.1920928955078125e-7"); String str = bd.toPlainString(); 显示结果: 0.00000011920928955078125 亲测好使..

JAVA中经过nginx反向代理获取客户端ip并获取相关坐标等信息

关于搜狐新浪ip库查询接口的使用 直接输出访客ip及所在城市: <script src="http://pv.sohu.com/cityjson?ie=utf-8" ></script> <script type="text/javascript"> document.write('IP:'+returnCitySN.cip+'<br>城市:'+returnCitySN.cname); </script>

谈谈java中的synchronized关键字

1.synchronized的3种用法 public class Client { public static void main(String[] args) { testSynchronized(); } private static void testSynchronized() { new Foo().sayHello(); } static class Foo { //修饰代码块 void sayHello() { synchronized (this) { System.out.pr

java中使用堆外内存,关于内存回收需要注意的事和没有解决的遗留问题(等大神解答)

JVM可以使用的内存分外2种:堆内存和堆外内存,堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemoryError这个错误.使用堆外内存,就是为了能直接分配和释放内存,提高效率.JDK5.0之后,代码中能直接操作本地内存的方式有2种:使用未公开的Unsafe和NIO包下ByteBuffer. 关于Unsafe对象的简介和获取方式,可以参考我的另一篇博客  java获取Unsafe类的实例和取消eclipse编译的错误  使用By

Java中的clone()----深复制,浅复制

这篇文章主要介绍了Java中对象的深复制(深克隆)和浅复制(浅克隆) ,需要的朋友可以参考下 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象.换言之,深复制把要复制的对象所引用

java中变量使用的总结

java中整数默认为int,小数默认为double. float n5=1.3; 这个句子就会报错,应该修改成这样float n5=1.3f; 八大基本类型 变量类型 位数 范围 备注 Byte 8位 -27-------27-1 带符号整数 Short 16位 -215-------215-1 带符号整数 Int 32位 -231-------231-1 带符号整数 Long 64位 -263------263-1 带符号整数 Char 16位 0-----216-1 无符号整数 Float