题目:
/**
- 2.有1,2,2,3,4,5这6个数字,用Java写一个main函数,
- 打印出所有不同的排列,如:512234
- 要求: '4’不能在第三位, '3’与’5’不能相连 (9分)
- 从最小值到最大值进行遍历122345 – > 543221
- 筛选出符合条件的数字
- 将数字 – > 字符串 进行比较(一位一位进行对应比较)
- 1 2 3 三个数字排列组成几种情况 —> for循环嵌套
- 123 --> 321 进行排查
*/
思路:从最小值到最大值进行遍历,排查,筛选出符合条件的数字
public class Text04 {
//规定范围之外的数字
static String[] no = new String[] {"0","6","7","8","9"};
//规定范围之内的数字
static String[] yes = new String[] {"1","2","2","3","4","5"};
public static void main(String[] args) {
int count =0;
for (int i = 122345 ; i <= 543221; i++) {
if( check(i+"") == true ) {
count ++;
System.out.println( i );
}
}
System.out.println(count);
// String s ="123";
// System.out.println(s.indexOf("23"));
}
/**
* 判断数字(转换成字符串后进行比较)是否符合条件的方法
* @param i
* @return
*/
private static boolean check(String str) {
// //组成该数字的每位数字都必须在规定的数字之内
for(String s: no) {
//indexOf( str ) --> 返回值是int(返回这个字符在字符串中第一次出现的位置下标) >=0,包含
//不包含 返回-1
if(str.indexOf( s ) >=0 ) return false;//包含了范围之外的数字
}
//判断该数字中的组成数字是否达到次数要求
for(String s: yes) {
int num = str.indexOf( s );
if(num < 0) return false; //不包含规定数字的话,return false
//indexOf( str , num ) 从下标为num开始进行排查,返回str第一次出现的位置下标
else if(str.indexOf( s , num+1) >= 0 && ! "2".equals( s ) ) return false; //数字发生重复且不是2
}
//4不能在第三位
if(str.charAt( 2 ) == '4') return false;
//3不能与5相连 --> 不能含有“35” 和 “53” 的字符串
if(str.indexOf("35") >= 0 || str.indexOf("53") >=0 ) return false;//含有53,和35的字符串
return true;
}
}