在做题中经常遇到的关于需要输出符合条件的数字排序情况
例如:有1,2,2,3,4,5这6个数字,用Java写一个main函数,打印出所有不同的排列,如:512234
要求: '4'不能在第三位,'3'与'5'不能相连。代码实现如下:(代码中有注释)
public class Test { public static void main(String[] args) { //这里用到的思想就是从6个数中找出最小的那个数依次输出,直到最大的那个数停止,在中间不符合条件的不输出 for(int i=122345;i<=543221;i++){ if(isVaild(i)){ System.out.println(i); } } } public static boolean isVaild(int i){ //首先要保证数字4不能在第三位 String number=i+""; //这里加一个空格使数字变成一个字符串,使用String类的方法判断 if(number.charAt(2)=='4'){ return false; } //再考虑数字3和数字5不能连在一起 if(number.contains("35")||number.contains("53")){ return false; } //接着要考虑输出的部分不能有0,6,7,8,9,然后还要保证输出的数字中:2要出现两次,其余的1、3、 4、5只能出现一次 //这里用到一个技巧String类的indexOf()与lastIndexOf()方法,判断2两次出现的地方是否在同一 个位置,如果都在一个位置代表只出现一次,就要排除掉 if(number.indexOf('2')==number.lastIndexOf('2')){ return false; } //再保证其余要求的数字只出现一次 int[]yesnum={1,2,3,4,5}; for(int j=0;j<yesnum.length;j++){ if(!number.contains(yesnum[j]+"")){ return false; } } return true; } }