早教吧作业答案频道 -->其他-->
用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:“4”不能在第三位,“3”与“5”不能相连。
题目详情
用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:“4”不能在第三位,“3”与“5”不能相连。
▼优质解答
答案和解析
package org.quzz.baidu;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class AppandDigitToString {
/**
* 给一个字符串的后面扩展多个1位数字,形成多个字符串的列表。要求:“4”不能在第三位,“3”与“5”不能相连。
* @param string 被扩展的字符串。
* @param digitList 扩展的数字列表,此列表中的每个数字,都试图扩展到字符串后面。
* @return 扩展子后形成的字符串列表。
*/
public static List appandDigitToString(String string,List digitList){
List resultList = new ArrayList();
//digitList已经为空,直接把string加入到结果列表中
if(digitList.size()==0){
resultList.add(string);
return resultList;
}
for(Integer digit: digitList){
//4不能在第3位
if(string.length()==2 && digit==4)
break;
//3与5不能相连
if(string.endsWith("3") && digit==5)
break;
if(string.endsWith("5") && digit==3)
break;
//把数字加到字符串后面,形成新串
String newString = string+digit;
//去掉已经加到字符串里面的数字,形成一个新的数字列表
List newDigitList = new ArrayList();
newDigitList.addAll(digitList);
newDigitList.remove(digit);
//递归调用
List newResultList = appandDigitToString(newString,newDigitList);
//添加新生成的字符串列表,但重复的字符串不加入
for(String newResult: newResultList){
if(!resultList.contains(newResult))
resultList.add(newResult);
}
}
return resultList;
}
public static void main(String[] args){
try{
List digitList = Arrays.asList(1,2,2,3,4,5);
List resultList = appandDigitToString("",digitList);
System.out.println("共"+resultList.size()+"种组合:");
for(String result:resultList){
System.out.println(result);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
//实测{1,2,2}、{1,2,2,3}、{1,2,2,3,4}时候结果正确,具体自己验证一下吧。
//算法:有一个字符串,从一个数字数组里面依次取一个数字,当满足要求的时候就附加到此串
//之后,形成多个新串,对应每个新串的数字数组中要剔除已经附件过的数字,依次递归附加。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class AppandDigitToString {
/**
* 给一个字符串的后面扩展多个1位数字,形成多个字符串的列表。要求:“4”不能在第三位,“3”与“5”不能相连。
* @param string 被扩展的字符串。
* @param digitList 扩展的数字列表,此列表中的每个数字,都试图扩展到字符串后面。
* @return 扩展子后形成的字符串列表。
*/
public static List
List
//digitList已经为空,直接把string加入到结果列表中
if(digitList.size()==0){
resultList.add(string);
return resultList;
}
for(Integer digit: digitList){
//4不能在第3位
if(string.length()==2 && digit==4)
break;
//3与5不能相连
if(string.endsWith("3") && digit==5)
break;
if(string.endsWith("5") && digit==3)
break;
//把数字加到字符串后面,形成新串
String newString = string+digit;
//去掉已经加到字符串里面的数字,形成一个新的数字列表
List
newDigitList.addAll(digitList);
newDigitList.remove(digit);
//递归调用
List
//添加新生成的字符串列表,但重复的字符串不加入
for(String newResult: newResultList){
if(!resultList.contains(newResult))
resultList.add(newResult);
}
}
return resultList;
}
public static void main(String[] args){
try{
List
List
System.out.println("共"+resultList.size()+"种组合:");
for(String result:resultList){
System.out.println(result);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
//实测{1,2,2}、{1,2,2,3}、{1,2,2,3,4}时候结果正确,具体自己验证一下吧。
//算法:有一个字符串,从一个数字数组里面依次取一个数字,当满足要求的时候就附加到此串
//之后,形成多个新串,对应每个新串的数字数组中要剔除已经附件过的数字,依次递归附加。
看了 用1、2、2、3、4、5这六...的网友还看了以下:
例如:在4点钟的时候,时针和分针组成的较小的角度的度数是(?)等.1.在4点钟的时候,时针和分针组 2020-05-02 …
在日历上任意圈出一竖列上的4个数,如果这4个数的和是54,那么这4个多少?如果这4个数的和是70, 2020-05-13 …
如图,在平行四边形ABCD中,MN//AB,EF//BC,EF、MN将平行四边形分成4块.如图,在 2020-05-15 …
如图,在平面直角坐标系中,直线l:y=-4/3x+4分别交x轴、y轴于点A,B,将△AOB绕点如图 2020-05-16 …
如图,在平面直角坐标系中,直线y=4/3x+4分别交x轴 y轴于AB两点,点C为OB的中点如图,在 2020-05-16 …
如图,在直角坐标系中,已知点A(-3,0),B(0,4),对△OAB连续作旋转变换,依次得到三角形 2020-05-16 …
如图,在直角坐标系中,已知点A(-3,0),B(0,4),对△OAB连续做旋转变换,依次得到三角形 2020-05-16 …
如图,在平面直角坐标系中,点A(2,4),B(5,0)动点p从点B出发沿BO向终点O运动如图所示, 2020-05-16 …
《中秋节中的一件事》作文要求:1.写一件中秋节中的事情2.要具体4.450字左右赏:1.如果在3: 2020-05-17 …
- 一个质量为3kg的物体,在(0~4)s内受水平拉力F作用,在(4~10)s内仅受摩擦力作用而停 2020-05-17 …