黑马程序员技术交流社区
标题:
java算法排列组合的题
[打印本页]
作者:
张稳
时间:
2014-2-22 23:18
标题:
java算法排列组合的题
本帖最后由 张稳 于 2014-2-22 23:21 编辑
package com.itheima;
/**
* 1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,
*如:512234、412345等.要求:"4"不能在第三位,"3"与"5"不能相连.
*
*
*/
public class listFiveNumber{
public static void main(String[] args) {
String s = "1234";//这里是要用到的所有数组成的一个字符串,其它字符同样适用
char[] c = s.toCharArray();
new listFiveNumber().zuhe(c,c.length,0);
System.out.println("可能的组合数:"+kk);
}
static int kk=0;
private void zuhe(char[] array, int n, int k) {
if (n == k) {
if(array[2]!='4'){//第三个位置不能出现4
String str = new String(array);
if(str.indexOf("53")<0&&str.indexOf("35")<0){//3,5不能连续出现
System.out.println(str);
++kk;
}
}
} else {
for (int i = k; i < n; i++) {
swap(array, k, i);
zuhe(array, n, k + 1);
swap(array, i, k);
}
}
}
private void swap(char[] a, int x, int y) {
char temp = a[x];
a[x] = a[y];
a[y] = temp;
}
}
复制代码
代码中
for (int i = k; i < n; i++) {
swap(array, k, i);
zuhe(array, n, k + 1);
swap(array, i, k);
}
复制代码
这段代码能不能帮忙解释一下啊,以及这样的算法怎么得来的思路
作者:
elq7xy
时间:
2014-2-23 00:15
else是n^=k的情况,代码中遍历了数组,使得数组中每一个元素都与zuhe方法做比较,确保符合zuhe的方法。不知道我想的对不对呢= =
至于思路,应该先把字符床变成数组才好比较,应该先确定4不能在第3位,3与5不能相连的方法好一些,就先写zuhe的方法,zuhe的方法写完了,可是数组还没有遍历,就再写数组,然后有了数组遍历的方法后,再拿这个方法去遍历字符串,把思路先整理一下,细节部分再做考虑就会简单了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2