Java,算法,从1到4进行全排列

    本文Java代码转载自微信公众号“算法文摘”,作者danqiusheng。

    原文地址:https://github.com/danqiusheng/algorithm_practice/blob/master/src/dfs/NormalFullV1.java

    从微信公众号~“算法文摘”,看到一篇关于深度优先搜索的文章,文章中前半部分提到对1~4数字的全排,讲到一种简单粗暴的方法~暴力穷举,用4个for循环来穷举所有排列可能。算法的核心代码(Java)如下:

 
public static void main(String[] args)
 {
     int count = 0;// 记录排序次数
     int[] arr = new int[5]; // 存储结果
     for (arr[1] = 1; arr[1] < 5; arr[1]++)
     {
         for (arr[2] = 1; arr[2] < 5; arr[2]++) 
         {
             for (arr[3] = 1; arr[3] < 5; arr[3]++) 
             {
                 for (arr[4] = 1; arr[4] < 5; arr[4]++) 
                 {
                      int[] result = new int[5];// 判断是否重复,含有5个元素的数组result
                     boolean flag = true;
                     for (int i = 1; i < 5; i++) 
                     {
                         result[arr[i]] += 1;
                         if(result[arr[i]] > 1) //由相加个数,判断是否重复
                        	 flag = false; // 判断当前数字是否重复出现
                     }
                     if(flag)
                     { // 所有的数字出现
                         System.out.println(arr[1] + "" + arr[2] + "" + arr[3] + "" + arr[4]);
                         count++;
                     }
                 }
             }
         }
     }
     System.out.println("total count:"+count);
 }




    上述代码中,在eclipse里验证过,整个主函数部分是没有错误,编译无误,可以运行。经debug后自己也理解每行代码如何执行,以及执行后的数组变化,但目前自己对作者上述代码还没有理解其原理。

    如上述

                         if(result[arr[i]] > 1) //由相加个数,判断是否重复
                        	 flag = false; // 判断当前数字是否重复出现
部分,就是自己暂时没有理解的内容,不懂为何通过相加个数,就能判断是否重复。总之,对于整个代码结构还是没有理解。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值