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

本文实例讲述了Java获得一个数组的指定长度排列组合算法。分享给大家供大家参考,具体如下:

package demo;
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操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • Java递归实现字符串全排列与全组合

    排列组合算法用途广泛,需要掌握,为降低门槛,本文主要关注算法的逻辑和简易性,未重视算法效率. 结合网络书本上的实现和自己的需求,这里列有四个目标: 1. 所有元素的全排列: ab的全排列是ab, ba(顺序相关); 2. 所有元素的全组合: ab的全组合是a, b, ab(顺序无关); 3. 求n个元素中选取m个元素的组合方式有哪些: abc中选2个元素的组合是ab, ac, bc; 4. 求n个元素中选取m个元素的排列方式有哪些: abc中选2个元素的排列是ab, ba, ac, ca, bc

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

    Java多个数组之间的排列组合,具体内容如下 说明:有一批手机有各种颜色.各种尺寸.各种版本,然后要实现他们之间各种属性的组合. 定义各种属性 String[] color={"红色","白色","蓝色","金色"}; String[] size={"4.7寸","5.1寸","6.0寸"}; String[] version={"联通",&quo

  • 高效的java版排列组合算法

    本文实例为大家分享了java排列组合算法的具体代码,供大家参考,具体内容如下 package BeanUtil; import java.util.ArrayList; import java.util.List; import com.work.core.exception.OurException; /** * 统计任三出现的最多的几率的组合 * * @author wangmingjie * @date 2009-1-1下午01:22:19 */ public class Copy_2_o

  • Java实现abc字符串排列组合

    1.可重复排列:abc三个字符组成的所有长度为3的字符串,aaa,aab,aac......ccc 一共27种 利用递归的思想,第一个字符可以从abc中选择一个,三种选择,之后问题转化为abc组成长度为2的字符的情况,循环递归后可以求出所有的可能.控制好循环退出条件即可. 利用递归可以处理,不知道字符长度的情况下,即通用处理.如果知道长度,只需要利用多层循环,也可以得出结论. public class Permutation { public static void main(String[]

  • java数组排列组合问题汇总

    面试或笔试中,多次遇到以下4个关于排列组合的手撕算法,这里做个笔记,方法日后查阅: 1. 无重复元素的数组,求全排列: 2. 有重复元素的数组,求全排列: 3. 无重复元素的数组,求组合[子集]: 4. 有重复元素的数组,求组合: 以上四类题,可以用统一的模板实现,如下所示: /* *[组合&&排列] *把一个数组里的数组合全部列出,比如1和2列出来为1,2,12,21. *这个题目可以扩展成四个: *1.无重复数字的数组,求组合 *2.有重复数字的数组,求组合 *3.无重复数字的数组,求

  • 关于各种排列组合java算法实现方法

    一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用 复制代码 代码如下: import java.util.Arrays; //利用二进制算法进行全排列//count1:170187//count2:291656 public class test {    public static void main(String[] args) {        long start=System.currentTimeMillis();        count

  • java实现字符串排列组合问题

    本文为大家介绍了java实现字符串排列组合问题,供大家参考,具体内容如下 import java.util.ArrayList; import java.util.Collections; /** * 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac, * bca,cab和cba. * * @author pomay * */ public class Solution_stringarrange

  • Java排列组合字符串的方法

    例如 输入"abc",打印所有可能出现的组合情况,并且消除重复值. 所谓排列组合如下: 排列组合,字符串:abc bca acb abc cba bac cab 排列组合个数:6 实现代码(结合Java8 lambda表达式实现) import org.junit.Test; import java.util.ArrayList; import java.util.HashSet; import java.util.List; public class test2 { @Test pu

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

    本文实例讲述了Java获得一个数组的指定长度排列组合算法.分享给大家供大家参考,具体如下: package demo; import java.util.Stack; /** * JAVA获得一个数组的指定长度的排列组合.<br> * * @author JAVA世纪网(java2000.net, laozizhu.com) */ public class TestSequenceAll { public static void main(String[] args) { TestSequen

  • JS实现的排列组合算法示例

    本文实例讲述了JS实现的排列组合算法.分享给大家供大家参考,具体如下: 在数学中有排列组合,用来计算概率. 比如:从4个数字中,任意选择两个的情况.从5个数字中任意选择3个数字的情况.(这里我们只考虑没有顺序的情况). 公式:C(n,m)=n!/[m!(n-m)!]=n*(n-1)*...*(n-m+1)/[1*2*...*m],如C(5,2)=[5*4]/[1*2]=10. 举例说明:有 1,2,3,4 四个数字,从这四个数字中,任意选择两个数字一共有多少种情况:[1,2], [1,3], [

  • Python实现的简单排列组合算法示例

    本文实例讲述了Python实现的简单排列组合算法.分享给大家供大家参考,具体如下: 1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍 2.一个列表数据任意组合 主要是利用自带的库: #_*_ coding:utf-8 _*_ #__author__='dragon' import itertools list1 = [1,2,3,4,5] list2 = [] for i in range(1,len(list1)+1): iter = itertools.comb

  • java 判断一个数组中的数值是否连续相邻的方法

    * 判断一个数组中的数值是否连续相邻 * 满足以下条件: * 1.0是例外可以反复出现 0可以通配任何字符 * 2.相同的数值不会重复出现 * 3.该数组可以是乱序的 * 当数组不含有0时满足最大值-最小值=n(数组长度)-1 * 当数组数组含有0时.满足最大值-最小值<n(数组长度)-1 * 所以,当最大值最大值-最小值>n(数组长度)-1时,一定不是连续相邻数组 package datastruct.usearray; public class JudgeAdjacent { privat

  • JAVA编程实现随机生成指定长度的密码功能【大小写和数字组合】

    本文实例讲述了JAVA编程实现随机生成指定长度的密码功能.分享给大家供大家参考,具体如下: import java.util.Random; public class PassWordCreate { /** * 获得密码 * @param len 密码长度 * @return */ public String createPassWord(int len){ int random = this.createRandomInt(); return this.createPassWord(rand

  • 如何用Java实现排列组合算法

    需求 我们的数据表有多个维度,任意多个维度组合后进行 group by 可能会产生一些"奇妙"的反应,由于不确定怎么组合,就需要将所有的组合都列出来进行尝试. 抽象一下就是从一个集合中取出任意元素,形成唯一的组合.如[a,b,c]可组合为[a].[b].[c].[ab].[bc].[ac].[abc]. 要求如下: 组合内的元素数大于 0 小于等于 数组大小: 组合内不能有重复元素,如 [aab] 是不符合要求的组合: 组合内元素的位置随意,即 [ab] 和 [ba] 视为同一种组合:

  • python输出数组中指定元素的所有索引示例

    如下所示,代码为: array也可直接使用上面代码.测试如下: 以上这篇python输出数组中指定元素的所有索引示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Golang排列组合算法问题之全排列实现方法

    本文实例讲述了Golang排列组合算法问题之全排列实现方法.分享给大家供大家参考,具体如下: [排列组合问题] 一共N辆火车(0<N<10),每辆火车以数字1-9编号,要求以字典序排序输出火车出站的序列号. 输入: 包括N个正整数(0<N<10),范围为1到9,数字之间用空格分割,字符串首位不包含空格. 输出: 输出以字典序排序的火车出站序列号,每个编号以空格隔开,每个输出序列换行. 样例输入: 1 2 3 样例输出: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3

  • 浅谈c语言中一种典型的排列组合算法

    c语言中的全排列算法和组合数算法在实际问题中应用非常之广,但算法有许许多多,而我个人认为方法不必记太多,最好只记熟一种即可,一招鲜亦可吃遍天 全排列: #include<stdio.h> void swap(int *p1,int *p2) { int t=*p1; *p1=*p2; *p2=t; } void permutation(int a[],int index,int size) { if(index==size) { for(int i=0;i<size;i++) print

随机推荐