黑马程序员技术交流社区

标题: java算法排列组合的题 [打印本页]

作者: 张稳    时间: 2014-2-22 23:18
标题: java算法排列组合的题
本帖最后由 张稳 于 2014-2-22 23:21 编辑

  1. package com.itheima;



  2.     /**
  3.      * 1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,
  4.       *如:512234、412345等.要求:"4"不能在第三位,"3"与"5"不能相连.
  5.      *
  6.      *
  7.      */
  8. public class listFiveNumber{
  9.      
  10.      public static void main(String[] args) {
  11.       String s = "1234";//这里是要用到的所有数组成的一个字符串,其它字符同样适用
  12.       char[] c = s.toCharArray();
  13.       new listFiveNumber().zuhe(c,c.length,0);
  14.       System.out.println("可能的组合数:"+kk);
  15.      }
  16.      static int kk=0;
  17.      private void zuhe(char[] array, int n, int k) {
  18.       if (n == k) {
  19.        if(array[2]!='4'){//第三个位置不能出现4
  20.         String str = new String(array);
  21.         if(str.indexOf("53")<0&&str.indexOf("35")<0){//3,5不能连续出现
  22.          System.out.println(str);
  23.          ++kk;
  24.         }
  25.        }
  26.       } else {
  27.        for (int i = k; i < n; i++) {
  28.         swap(array, k, i);
  29.         zuhe(array, n, k + 1);
  30.         swap(array, i, k);
  31.        }
  32.       }
  33.      }
  34.      
  35.      private void swap(char[] a, int x, int y) {
  36.       char temp = a[x];
  37.       a[x] = a[y];
  38.       a[y] = temp;
  39.      }
  40.     }
复制代码

        
代码中
  1.            for (int i = k; i < n; i++) {
  2.             swap(array, k, i);
  3.             zuhe(array, n, k + 1);
  4.             swap(array, i, k);
  5.            }
复制代码

这段代码能不能帮忙解释一下啊,以及这样的算法怎么得来的思路
作者: elq7xy    时间: 2014-2-23 00:15
else是n^=k的情况,代码中遍历了数组,使得数组中每一个元素都与zuhe方法做比较,确保符合zuhe的方法。不知道我想的对不对呢= =
至于思路,应该先把字符床变成数组才好比较,应该先确定4不能在第3位,3与5不能相连的方法好一些,就先写zuhe的方法,zuhe的方法写完了,可是数组还没有遍历,就再写数组,然后有了数组遍历的方法后,再拿这个方法去遍历字符串,把思路先整理一下,细节部分再做考虑就会简单了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2