面试题:1,2,2,3,4,5全排列问题

题目:
/**

  • 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;
 }
}













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值