`
农村哥们
  • 浏览: 288244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA获得一个数组的指定长度的排列组合

阅读更多
题目,得到某个数组,比如【1,2,3】 获得其全部的排列组合,包括1个数字的。2个数字的,和三个数字的等等。

 

import java.util.Stack;

/**
 * JAVA获得一个数组的指定长度的排列组合。<br>
 * 
 * @author JAVA世纪网(java2000.net, laozizhu.com)
 */
public class TestSequenceAll {
  public static void main(String[] args) {
    TestSequenceAll t = new TestSequenceAll();
    Object[] arr = { 1, 2, 3 };
    // 循环获得每个长度的排列组合
    for (int num = 1; num <= arr.length; num++) {
      t.getSequence(arr, 0, num);
    }
  }

  // 存储结果的堆栈
  private Stack<Object> stack = new Stack<Object>();

  /**
   * 获得指定数组从指定开始的指定数量的数据组合<br>
   * 
   * @param arr 指定的数组
   * @param begin 开始位置
   * @param num 获得的数量
   */
  public void getSequence(Object[] arr, int begin, int num) {
    if (num == 0) {
      System.out.println(stack); // 找到一个结果
    } else {
      // 循环每个可用的元素
      for (int i = begin; i < arr.length; i++) {
        // 当前位置数据放入结果堆栈
        stack.push(arr[i]);
        // 将当前数据与起始位置数据交换
        swap(arr, begin, i);
        // 从下一个位置查找其余的组合
        getSequence(arr, begin + 1, num - 1);
        // 交换回来
        swap(arr, begin, i);
        // 去除当前数据
        stack.pop();
      }
    }
  }

  /**
   * 交换2个数组的元素
   * 
   * @param arr 数组
   * @param from 位置1
   * @param to 位置2
   */
  public static void swap(Object[] arr, int from, int to) {
    if (from == to) {
      return;
    }
    Object tmp = arr[from];
    arr[from] = arr[to];
    arr[to] = tmp;
  }
}


运行结果
[1]
[2]
[3]
[1, 2]
[1, 3]
[2, 1]
[2, 3]
[3, 2]
[3, 1]
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
分享到:
评论

相关推荐

    Java获得一个数组的指定长度排列组合算法示例

    主要介绍了Java获得一个数组的指定长度排列组合算法,结合实例形式分析了java排列组合相关数组遍历、运算操作技巧,需要的朋友可以参考下

    Java学习笔记,数组初步

    * 构造一个数组,必须指定长度。 数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。 3. 数组常见操作 数组创建后,我们经常需要对数组做两种最常见的操作:遍历、拷贝。 * 遍历指的就是“通过...

    基于Java程序设计语言中一维数组的应用.pdf

    声明一个数组时仅为数组指定了数组名称和元素的类型,并未指定元素的个数,没有为数组元素分配内存,则不能使用数组存储数据。要让系统为数组元素分配内存,必须要指明数组元素的个数,并通过 New 运算符为数组元素...

    Java 按规则将数据插入到数组中.rar

     //创建一个整型数组,长度为12  int [] arr = new int[12];  Random r = new Random();  for(int i = 1;i ;i )  {//长生10个随机数,并赋给数组arr   arr[i] = r.nextInt(1000);  }  //输出数组arr中的元素...

    数组概述和特点

    其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.  数组的三个基本特点: 1. 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。 2. 其元素必须是相同类型,不允许出现混合...

    java基本数据类型与数组

    在 Java 中,数组是一种引用型变量,两个数组如果有相同的引用(地址),它们就有相同的元素。数组的长度可以使用 x.length 获取,例如:int[] z = new int[2]; System.out.println(z.length);。 本章节介绍了 Java...

    实验4 数组(4学时)

    1、在main方法中创建一个含有10个元素的int型数组,进行以下操作:(1)将数组元素按照从小到大的顺序排列;(2)对排好序的数组使用折半查找(使用递归和非递归两种形式分别实现)查找某一个int元素。 2、使用一维...

    Java SE练习代码总结 Java学习资料

    二维数组,可以看成一维数组array1作为另一个一维数组array2元素而存在,从数组底层运行机制来看,其实没有多维数组。 二维数组的元素存放的是各个一维数组的地址值,引用。 Arrays工具类的使用 public static ...

    21天学会Java之(Java SE第八篇):数组、冒泡排序法、二分法查找

    数组是相同类型数据的有序集合,数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。数组的三个基本特点: 长度是确定...

    Java算法总结2010-09-20

    2.编写程序,将两个各有6个整数的数组,合并成一个由小到大排列的数组,(该数组的长度为12)*/ 3.一个球从100米高度自由落下后,反弹回原来高度的一半。按此规律,到第10次落地时,行程共有多少米? * 然后将反弹起多高...

    javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号

    然后再遍历数组得到对应的序号(数组下标加1),又或者想到一个个从小到大的生成push进数组,然后判断该数是不是当前题目给的数,如果是的话要求的序号就是当前数组的长度,比前面好的一点的是不用浪费时间去计算生成...

    java 经典习题.doc

    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,...

    整数1~30(1-n)随机乱序排列,无重复数字,不用if判断。

    创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同。解法如下: int[] arr = new int[6]; //随机生成1-30范围内数字 for (int i = 0; i &lt; arr.length; i++) {// [0,1) [0,30) [1,31) arr[i] ...

    冒泡排序算法实现javascript, python, go, java, php

    这样,每进行一轮比较和交换操作,就会有一个元素被放置到其最终位置上,这个过程像气泡一样上浮到数组的顶端。随后,算法再从头开始,重复之前的比较和交换操作,直到整个数组被正确排序。 冒泡排序算法的复杂度为...

    java课程实验

    1、在main方法中创建一个含有10个元素的int型数组,进行以下操作:(1)将数组元素按照从小到大的顺序排列;(2)对排好序的数组使用折半查找(使用递归和非递归两种形式分别实现)查找某一个int元素。 2、使用一维...

    leetcode答案-Java-Portfolio:这些是一些具有挑战性的Java程序,非常棒!

    给定两个字符串,编写一个方法来判断一个字符串是否是另一个字符串的排列。 编写一个方法,用“ ”替换字符串中的所有空格。 您可以假设字符串的末尾有足够的空间来容纳附加字符,并且您会得到字符串的“真实”长度...

    流密码与分组密码编程.doc

    然后利用数组 key 来对数组 S 做一个置换,也就是对 S 数组里的数重新排列,排列算法为: for i from 0 to 255 S[i] := i end for j := 0 for i from 0 to 255 j := (j + S[i] + key[i mod keylength]) mod 256 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例014 使当前项目依赖另一个项目 21 1.3 界面设计器 22 实例015 安装界面设计器 22 实例016 设计Windows系统的运行对话框 界面 23 实例017 设计计算器程序界面 26 实例018 设计关于进销存管理系统的界面 27 第2章 ...

    八字java源码-Sorular:问题

    检查排列:给定两个字符串,编写一个方法来判断一个是否是另一个的排列。 提示:#7、#84、#722、#737 1.3 URLify:编写一个方法,用' '替换字符串中的所有空格。 您可能会假设字符串末尾有足够的空间来容纳附加字符...

Global site tag (gtag.js) - Google Analytics