Java獲得一個(gè)數(shù)組的指定長度排列組合算法示例
本文實(shí)例講述了Java獲得一個(gè)數(shù)組的指定長度排列組合算法。分享給大家供大家參考,具體如下:
package demo;
import java.util.Stack;
/**
* JAVA獲得一個(gè)數(shù)組的指定長度的排列組合。<br>
*
* @author JAVA世紀(jì)網(wǎng)(java2000.net, laozizhu.com)
*/
public class TestSequenceAll {
public static void main(String[] args) {
TestSequenceAll t = new TestSequenceAll();
Object[] arr = { 1, 2, 3 };
// 循環(huán)獲得每個(gè)長度的排列組合
for (int num = 1; num <= arr.length; num++) {
t.getSequence(arr, 0, num);
}
}
// 存儲結(jié)果的堆棧
private Stack<Object> stack = new Stack<Object>();
/**
* 獲得指定數(shù)組從指定開始的指定數(shù)量的數(shù)據(jù)組合<br>
*
* @param arr 指定的數(shù)組
* @param begin 開始位置
* @param num 獲得的數(shù)量
*/
public void getSequence(Object[] arr, int begin, int num) {
if (num == 0) {
System.out.println(stack); // 找到一個(gè)結(jié)果
} else {
// 循環(huán)每個(gè)可用的元素
for (int i = begin; i < arr.length; i++) {
// 當(dāng)前位置數(shù)據(jù)放入結(jié)果堆棧
stack.push(arr[i]);
// 將當(dāng)前數(shù)據(jù)與起始位置數(shù)據(jù)交換
swap(arr, begin, i);
// 從下一個(gè)位置查找其余的組合
getSequence(arr, begin + 1, num - 1);
// 交換回來
swap(arr, begin, i);
// 去除當(dāng)前數(shù)據(jù)
stack.pop();
}
}
}
/**
* 交換2個(gè)數(shù)組的元素
*
* @param arr 數(shù)組
* @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;
}
}
運(yùn)行結(jié)果:
[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]
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Spring Data Jpa多表查詢返回自定義實(shí)體方式
這篇文章主要介紹了Spring Data Jpa多表查詢返回自定義實(shí)體方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
java實(shí)現(xiàn)給圖片加鋪滿的網(wǎng)格式文字水印
這篇文章主要給大家介紹了關(guān)于java實(shí)現(xiàn)給圖片加鋪滿的網(wǎng)格式文字水印的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
java關(guān)鍵字abstract(抽象)實(shí)例詳解
在Java中,抽象類是不能實(shí)例化的類,它通常作為其他子類的父類存在,并提供了一種繼承的框架,抽象類中可以包含抽象方法,這些方法沒有具體的實(shí)現(xiàn),必須由子類來提供,本文給大家介紹java關(guān)鍵字abstract(抽象)實(shí)例詳解,感興趣的朋友跟隨小編一起看看吧2024-10-10
使用SpringBoot實(shí)現(xiàn)微服務(wù)超時(shí)重試模式的示例
這篇文章主要介紹了使用SpringBoot實(shí)現(xiàn)微服務(wù)超時(shí)重試模式的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-11-11

