V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dabai0806
V2EX  ›  算法

Java 排列组合问题

  •  
  •   dabai0806 · 2022-05-27 10:43:54 +08:00 · 1082 次点击
    这是一个创建于 915 天前的主题,其中的信息可能已经有所发展或是发生改变。

    两个数(0 和 1)5 位长度, 怎么获取所有组合列表数组

    java 如何实现, 有第三方库可以直接调用吗(手动狗头)

    6 条回复    2022-05-27 11:24:49 +08:00
    liprais
        1
    liprais  
       2022-05-27 10:55:55 +08:00
    两个 for 循环完事
    nitmali
        2
    nitmali  
       2022-05-27 10:58:34 +08:00
    int num = (int)Math.pow(2, 5);
    for (int i = 1; i < num; i++) {
    System.out.println(Integer.toBinaryString(i) );
    }
    nitmali
        3
    nitmali  
       2022-05-27 11:00:37 +08:00
    @nitmali 改下从 i 从 0 开始,不足五位前面补 0
    dabai0806
        4
    dabai0806  
    OP
       2022-05-27 11:04:30 +08:00
    @nitmali #3 可以 感谢
    dabai0806
        5
    dabai0806  
    OP
       2022-05-27 11:05:03 +08:00
    我刚想到的, 写法有点菜
    int[][] arr = new int[(int) Math.pow(2,5)][5];
    int point = 0;
    for (int i = 0; i < 2; i++) {
    for (int i1 = 0; i1 < 2; i1++) {
    for (int i2 = 0; i2 < 2; i2++) {
    for (int i3 = 0; i3 < 2; i3++) {
    for (int i4 = 0; i4 < 2; i4++) {
    arr[point++] = new int[]{i, i1, i2, i3, i4};
    }
    }
    }
    }
    }
    nitmali
        6
    nitmali  
       2022-05-27 11:24:49 +08:00
    @dabai0806 直接转成二进制就可以了 比如 0 -> "00000"; 1 => "00001"; 2 -> "00010";..... 2^5 - 1 -> "11111"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3126 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 14:03 · PVG 22:03 · LAX 06:03 · JFK 09:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.