`
农村哥们
  • 浏览: 293306 次
  • 性别: 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 排列组合相关数组遍历、运算操作技巧,并提供了详细...

    Java实现多个数组间的排列组合

    Java实现多个数组间的排列组合是Java编程中的一种常见需求。例如,在手机销售中,手机有不同的颜色、尺寸和版本,这些属性之间存在排列组合关系,需要使用Java语言实现这些排列组合。 在Java中,实现多个数组间的...

    将两个有序数组,合并成另一个有序的数组,升序

    对于这个任务,核心目标是将两个已经按照升序排列的整数数组合并成一个新的有序数组,同时保持整体的升序特性。为了达成这一目标,我们可以采用一种有效的算法,利用贪心策略来确保合并后的数组依然是有序的。 在...

    java 将一个数组逆序输出的方法

    以下是一个详细的关于如何在Java中实现数组逆序输出的教程。 首先,我们来看给定的代码片段: ```java import java.util.*; public class lianxi31 { public static void main(String[] args) { Scanner s = ...

    06-Java基础(数组-内存图解)

    在创建一个数组时,我们需要指定元素的类型和数组的长度。例如,声明一个整型数组: ```java int[] numbers = new int[5]; ``` 这段代码创建了一个包含5个整数的数组`numbers`。数组在内存中的分配分为两步:声明...

    Java学习笔记,数组初步

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

    用Java动态数组扩充实现线性表

    在Java中,ArrayList类就是动态数组的一个典型例子。当我们创建一个ArrayList时,并不立即分配所有所需的空间,而是先分配一个初始容量,随着元素的增加,当容量不足时,会自动进行扩容操作。 线性表的动态扩充实现...

    微价值网【Android应用编程基础第10篇】Java语言中的数组(一)

    一维数组可以看作是线性结构,元素按照一个维度线性排列。二维数组则可以视为表格,每个元素拥有两个维度的索引。多维数组则可以有三个或更多的维度。 在Android应用开发中,数组经常用于处理和管理数据集。例如,...

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

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

    java m取n 重复 不重复 排列组合 for循环嵌套递归

    在计算机科学中,排列组合是一个重要的概念,在很多算法设计中都会用到。比如密码学中的密钥生成、信息安全中的数据加密等场景都可能涉及到这一概念。在Java编程语言中,通过不同的控制结构如for循环、递归等可以...

    java实现把两个有序数组合并到一个数组的实例

    在Java编程中,有时我们需要将两个已排序的数组合并成一个新的有序数组。这在处理大量数据时非常有用,比如在数据库查询、数据排序或者算法设计中。本篇将详细讲解如何利用Java实现这个功能,通过一个具体的实例来...

    Java 实例 - 删除数组元素源代码-详细教程.zip

    - **交换元素**:找到要删除元素之后的一个元素,将其值复制到要删除的位置,然后将最后一个元素移动到被覆盖的位置,最后减少数组长度。 3. **示例代码** 假设我们有一个整数数组`int[] arr = {1, 2, 3, 4, 5}`...

    数组操作的java成绩管理系统

    - **数组长度**:`scores.length`返回数组的长度。 3. **成绩管理系统核心功能**: - **添加成绩**:可以使用动态数组(ArrayList)或在固定大小数组中找到空位插入新成绩。 - **查询成绩**:通过学生ID或其他...

    java编程基础—数组练习.pdf

    `创建了一个整数类型的数组`arr`,长度为5,并初始化了值。 2. **一维数组初始化**: 初始化数组时,可以直接在创建时赋值,如上述的`int[] arr = new int[]{10,20,30,40,50};`。这样的方式被称为数组的“匿名初始...

    java实例-数组(学习资料)

    如获取数组长度(通过`array.length`),数组反转,数组输出,获取数组的最大值和最小值,数组合并,数组填充,数组扩容,删除数组元素,数组差集,数组交集,以及在数组中查找指定元素等。这些操作都是Java数组处理...

    锯齿数组打印杨辉三角形

    然后,我们使用一个锯齿数组shanJiaoXing来存储杨辉三角的每一行的元素。我们使用了三层for循环来计算杨辉三角的每一行的元素。第一层for循环用来分配每一行的存储空间,第二层for循环用来计算每一行的首列和尾列的...

    JAVA转byte[]为int,long,double

    因此,从`byte[]`转换到`int`,我们需要确保数组长度至少为4,并按照字节顺序(通常为大端或小端)正确组合字节。这里我们假设默认的大端序: ```java public static int bytesToInt(byte[] bytes) { return ...

    java 数组实现大数加减乘除运算

    每个数组元素代表大数的一个位,从低位到高位排列。例如,如果一个大数是12345,数组可以是`{5, 4, 3, 2, 1}`。数组长度通常会比大数的实际位数多一位,用于存储进位或借位。 3. **加法运算**: 加法运算从数组的...

    JAVA快速,选择,冒泡数组排序

    在Java中,快速排序的核心在于`partition`函数,它选择一个基准元素,然后重新排列数组,使得所有小于基准的元素位于基准之前,所有大于基准的元素位于基准之后。接着对基准两侧的子序列进行递归调用快速排序。 2....

    java 中文字符串数组按照音序排列

    ### Java 中文字符串数组按照音序排列 #### 知识点概述 在Java编程语言中,处理中文字符串是一项常见的需求,特别是在需要对含有中文字符的数据进行排序时。本篇文章将详细介绍如何实现一个自定义比较器...

Global site tag (gtag.js) - Google Analytics