本帖最后由 张稳 于 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);
- }
复制代码
这段代码能不能帮忙解释一下啊,以及这样的算法怎么得来的思路 |