java生成排列組合(字元串排列組合 java)

  • 1、求java實現String list[] = { “1”, “2”, “3” }; 的排列組合代碼
  • 2、java實現排列組合輸出
  • 3、java實現排列組合
  • 4、JAVA排列組合演算法如題:用x、y,求出指定長度的所有排列組合。
  • 5、java 排列順序,排列組合怎麼做
  • 6、java 定義了5個數字的數組,顯示輸出所有的排列組合

對於這個問題,我首先需要糾正一下樓主的措辭,這是個組合問題,跟排列無關,用排列組合亦不恰當。下面說下我的想法

元素不能重複,首先應該去掉相同的元素,最好的辦法是用set來實現。參考api

Arrays.asList

set.addAll

其實呢,這個是一個遞歸的過程,考慮下面情況

對於數組

{「1」},它的組合數就是{「1」}。

如果再加上一個元素「2「到上面的數組中,那麼,如果這個」2「不用,實質上跟{“1”}的情況是一樣的,這與不能重複相矛盾,所以」2「一定要用,就是在”1″中再加上」2「;於是我們得到

對於數組{」1「,」2「}它的組合數是{」1「}

再加入一個{」2「}。也許你也考慮到另外一種情況,即」2「也是它的一個組合數,我們考慮丟了,為什麼呢,因為在{」1「}中實質上還有一個稱為空的集合。這樣的話,重新整理一下:

1.對於list

=

{“1”},它的組合包括

{“1”},以及

empty.

2.對於list={“1″,”2”},它的組合包括{」1「,」2「}(在{」1「}中加了」2「),{」2「}(在empty中加入」2「),也許你還會講還應該包括{」1「},但是這個{」1「}我們已經在第1步就已經算出來了,不用再考慮了。

按照這樣的規則進行下去,你會發現這樣就把所有的組合數遍歷出來了。要具體的代碼就等會兒,我現在有事。

完成了一種實現,發給你參考下。

不過感覺應該還有更好的辦法,有時間我會繼續研究下.

import java.util.ArrayList;

import java.util.Arrays;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

public class TestQiuhe {

    //集合a{1,2,3,5,7,10},輸出不多於4個元素(不重複)的加和為22的組合。

    public static void main(String[] args) {

        int[] nums={1,2,3,5,7,10};

        int l = nums.length;

        Listint[] results=new ArrayListint[]();

        for(int i1=0;i1l;i1++){

            for(int i2=0;i2l;i2++){

                if(nums[i1]==22){

                    results.add(new int[]{nums[i1]});

                }

                if(i2!=i1){

                    if(nums[i1]+nums[i2]==22){

                        results.add(new int[]{nums[i1],nums[i2]});

                    }

                    for(int i3=0;i3l;i3++){

                        if(i3!=i1  i3!=i2){

                            if(nums[i1]+nums[i2]+nums[i3]==22){

                                results.add(new int[]{nums[i1],nums[i2],nums[i3]});

                            }

                            for(int i4=0;i4l;i4++){

                                if(i4!=i1  i4!= i2  i4!=i3){

                                    if(nums[i1]+nums[i2]+nums[i3]+nums[i4]==22){

                                        results.add(new int[]{nums[i1],nums[i2],nums[i3],nums[i4]});

                                    }

                                }

                            }

                        }

                    }

                }

            }

        }

        //去重

        SetString reSet=new HashSet();

        for(int[] r:results){

            Arrays.sort(r);

            reSet.add(Arrays.toString(r));

        }

        System.out.println(“一共得到結果集:”+reSet.size());

        System.out.println(reSet);

    }

}

運行結果:

一共得到結果集:2

[[5, 7, 10], [2, 3, 7, 10]]

char[] a={‘1′,’2′,’3′,’4’};

String b= “”;

String c= “”;

for (int i = 0; i a.length-1; i++) {

b=”[“+a[i]+”,”+a[i+1]+”]”;

c+=b;

}

System.out.println(c);

按照你的要求編寫的求x,y指定長度的所有排列組合的Java程序如下

import java.util.ArrayList;

import java.util.List;

public class EE {

 public static void combination(ListString list, String sNumbers, String sPath, int ALen)

 {

     if (sPath.length()== ALen)

     {

      list.add(sPath);

         return;

     }

     for(int i=0;isNumbers.length();i++)

     {

      

      combination(list,sNumbers,sPath +sNumbers.substring(i,i+1), ALen);

     }

 }

 public static void main(String[] args) {

  ListString output = new ArrayListString();

     System.out.println(“組合”);

     combination(output,”xy”, “”, 5);

     for(String s: output)

      System.out.print(s+” “);

     System.out.println();

     System.out.println(“共”+output.size()+”個”);

 }

}

運行結果

組合

xxxxx xxxxy xxxyx xxxyy xxyxx xxyxy xxyyx xxyyy xyxxx xyxxy xyxyx xyxyy xyyxx xyyxy xyyyx xyyyy yxxxx yxxxy yxxyx yxxyy yxyxx yxyxy yxyyx yxyyy yyxxx yyxxy yyxyx yyxyy yyyxx yyyxy yyyyx yyyyy

共32個

import java.io.File;

import java.util.*;

import java.util.Random;

import java.util.Scanner;

import java.io.FileWriter;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.io.FileNotFoundException;

public class TheDa {

public static void main(String args[]) throws Exception {

System.out.println(“please input the name for the list”);

Scanner inputReader = new Scanner(System.in);

String TheDalist = inputReader.nextLine();

String[] newstr=TheDalist.split(“\\s+”);

if (newstr.length !=4) { System.out.println(“the length is not ok”); }

else {

if ((newstr[0].equals(“Joe”)) (newstr[1].equals(“William”)) (newstr[2].equals(“Jack”)) (newstr[3].equals(“Averell”))) {

System.out.println(“True”);

}

else if ((newstr[0].equals(“Averell”)) (newstr[1].equals(“Jack”)) (newstr[2].equals(“William”)) (newstr[3].equals(“Joe”))) {

System.out.println(“True”);

}

else {

System.out.println(“False”);

}

}

}

}

import java.util.ArrayList;

import java.util.List;

public class PermAComb {

    static Listint[] allSorts = new ArrayListint[]();

        

    public static void permutation(int[] nums, int start, int end) {

        if (start == end) { // 當只要求對數組中一個數字進行全排列時,只要就按該數組輸出即可

            int[] newNums = new int[nums.length]; // 為新的排列創建一個數組容器

            for (int i=0; i=end; i++) {

                newNums[i] = nums[i];

            }

            allSorts.add(newNums); // 將新的排列組合存放起來

        } else {

            for (int i=start; i=end; i++) {

                int temp = nums; // 交換數組第一個元素與後續的元素

                nums = nums[i];

                nums[i] = temp;

                permutation(nums, start + 1, end); // 後續元素遞歸全排列

                nums[i] = nums; // 將交換後的數組還原

                nums = temp;

            }

        }

    }

        

    public static void main(String[] args) {

        int[] numArray = {1, 2, 3, 4, 5, 6};

        permutation(numArray, 0, numArray.length – 1);

        int[][] a = new int[allSorts.size()][]; // 你要的二維數組a

        allSorts.toArray(a);

            

        // 列印驗證

        for (int i=0; ia.length; i++) {

            int[] nums = a[i];

            for (int j=0; jnums.length; j++) {

                System.out.print(nums[j]);

            }

            System.out.println();

        }

        System.out.println(a.length);

    }

}

採納吧

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126322.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:07
下一篇 2024-10-03 23:07

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python中將字元串轉化為浮點數

    本文將介紹在Python中將字元串轉化為浮點數的常用方法。在介紹方法之前,我們先來思考一下這個問題應該如何解決。 一、eval函數 在Python中,最簡單、最常用的將字元串轉化為…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論