当前位置: 代码迷 >> Java Web开发 >> 判断是否有相等数目字,有难度
  详细解决方案

判断是否有相等数目字,有难度

热度:58   发布时间:2016-04-16 22:02:04.0
判断是否有相等数字,有难度
例如:


第一组号码 123

第二组号码:312,145

我希望的结果是第二组号码里只要包含123,不管什么顺序  都要返回true
用java如何来判断?想了一下午了。
------解决方案--------------------
参考全排列  
------解决方案--------------------
如果想简单的做,楼主可以将123的顺序组合:123,132,213,231,。。放到一个List,
List sList = new ArrayList();//将123的组合加入这个集合
List bList = ...//放置需要判断的第二组号码:312,145
boolean rs = false;
for(Integer s:sList){
  if(bList.contatin(s){
  rs = true;
  break;
}
}
判断下rs是否为true就好了
------解决方案--------------------
你再 优化下 ,其实找到后就不用递归循环了

public static void main(String[] args) throws Exception {

  
 String buf[]={"1","2","3"}; 
 List<String> item =new ArrayList<String>();
 perm(buf,0,buf.length-1,item);  
 
 String val="312,145";
 String strs[]=val.split(",");
 for (String o : strs) {
if(item.contains(o)){
System.out.println("包含"+o);
}
}

}

 public static void perm(String[] buf,int start,int end,List<String> list){  
        if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可(特殊情况)  
         String val="";
            for(int i=0;i<=end;i++){  
             val+=buf[i];
            }  
            list.add(val);
        }  
        else{//多个字母全排列(普遍情况) 
            for(int i=start;i<=end;i++){//(让指针start分别指向每一个数) 
             String temp=buf[start];//交换数组第一个元素与后续的元素  
                buf[start]=buf[i];  
                buf[i]=temp;  
                  
                perm(buf,start+1,end,list);//后续元素递归全排列  
                  
                temp=buf[start];//将交换后的数组还原  
                buf[start]=buf[i];  
                buf[i]=temp;  
            }  
        }  
    }  
  相关解决方案