Rebel-66 2020-12-03 15:55 采纳率: 80%
浏览 9
已结题

问一下java的排列组合,求大佬解答

假如一个数组是【1,2,3】,我想打印字符串1,2,3,12,13,23

就相当于数学中的C32,就是3*2*1种结果,代码应该怎么写的,求大佬们告知

  • 写回答

4条回答 默认 最新

  • 你不懂的吧 2020-12-03 16:27
    关注
    
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Combination {
    
        public static void main(String[] args) {
            char c[] = { 'a', 'b', 'c' };
            combine(c);
        }
    
        /**
         * {a,b,c}三个数的组合共有(2^3)-1种可能,用二进制表示即001~111 其中0代表不存在,1代表存在 即001 为 c ;
         * 010 为 b ... 111 为abc
         * @param chs
         * @Return: void
         */
        private static void combine(char[] chs) {
            final int len = chs.length;
            final int temp = 1 << len;
            List<Character> list = new ArrayList<Character>();
            // 共有temp-1种可能,即001~111
            for (int i = 1; i < temp; i++) {
                int t;
                for (int j = 0; j < len; j++) {
                    // 与运算,把001~111这七个数与1,2,4即(001,010,100)与运算,若不为0 说明对应该位数存在
                    t = 1 << j;
                    if ((t & i) != 0) {
                        list.add(chs[j]);
                    }
                }
                System.out.println(list.toString());
                list.clear();
            }
        }
    
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 11月18日
  • 已采纳回答 11月10日

悬赏问题

  • ¥15 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流