`
a881127b
  • 浏览: 64450 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

一道java面试题

阅读更多
题目:有n个骰子,每个骰子有1-6个数。投掷n个骰子有n个数字的组合,列出每次投掷数字不相同的组合。一共有多少种可能。用java编程实现:

解法:
import java.util.TreeSet;
import java.util.Iterator;
import java.util.Arrays;
import java.util.regex.*;
public class InterViewTest {
    public static void main(String[] args){
    	InterViewTest.method1(6);
    	
    }
    
    public static String arraysToString(String[] s) { 
    	StringBuilder t = new StringBuilder(); 
    	for (int i = 0; i < s.length; i++){
    		t.append(s[i]);
    	}    	 
    	return t.toString(); 
    } 
    
    public static void method1(int N) { 
    	TreeSet<String> tree = new TreeSet<String>(); 
    	long start = 1, end = 6; 
    	for (int i = 1; i < N; i++) { 
	    	start += 1 * convert(10, i); 
	    	end += 6 * convert(10, i); 
    	} 
    	String[] data; 
    	for (long j = start; j <= end; j++) { 
    		if (expValid(j + "")) { //返回j的字符串表示形式
		    	data = String.valueOf(j).split(""); 
		    	Arrays.sort(data); 
		    	tree.add(arraysToString(data)); 
    	    } 
    	} 

    	for (Iterator<String> t = tree.iterator(); t.hasNext();) { 
	    	String d = t.next(); 
	    	System.out.println(d); 
    	} 
    } 
    
    public static long convert(int data, int n) { 
    	long result = 1l; 
    	for (int i = 1; i <= n; i++){
    	  result *= data; 
    	}
    	return result; 
    } 
    
    public static boolean expValid(String s) { 
    	Pattern p4 = Pattern.compile("^[1-6]+$"); 
    	Matcher m4 = p4.matcher(s + "");
    	if (m4.find()){
    	  return true; 
    	}else{
    		return false; 
    	}
    }
   
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics