JAVA 電話號碼組合 遞迴
阿新 • • 發佈:2018-12-22
/電話號碼對應的字元組合:在電話或者手機上,一個數字如2對應著字母ABC,7對應著
PQRS。那麼數字串27所對應的字元的可能組合就有34=12種(如AP,BR等)。現在
輸入一個3到11位長的電話號碼,請打印出這個電話號碼所對應的字元的所有可能組合和組合數。
*/
package homework; import java.util.ArrayList; import java.util.List; import java.util.Scanner; /*電話號碼對應的字元組合:在電話或者手機上,一個數字如2對應著字母ABC,7對應著 PQRS。那麼數字串27所對應的字元的可能組合就有3*4=12種(如AP,BR等)。現在 輸入一個3到11位長的電話號碼,請打印出這個電話號碼所對應的字元的所有可能組合和組合數。 */ public class homework3 { static String[] str= new String[] {"0","1","abc","def", "ghi","jkl","mno","pqrs","tuv","wxyz"};//定義每個數字對應的字元 public static void main(String[] args) { System.out.println("請輸入3到11位的電話號碼:"); Scanner sc=new Scanner(System.in); String s=sc.next().toString();//將輸入的數字轉換為字元 String[] s1 = s.split("");//將輸入的一串數字分離,並賦給陣列s1儲存 int sum = sum(s1); System.out.println("總共有: "+ sum+"種情況"); List<String> answer = letterCombinations( s1,s); combination(s, 0, answer); //呼叫組合函式輸出所有可能的結果 System.out.println("可能的組合為:"+answer.toString()+"/n"); } public static int sum(String s1[]) { //計算總共有多少中情況 int len = s1.length; int sum = 1; for(int i = 0;i<len; i ++) { sum *= (str[Integer. valueOf (s1[i])]).length(); // } return sum; } static StringBuffer sb = new StringBuffer(); public static List<String> letterCombinations(String s1[],String s) { if (s1.length == 0) { return null; } List<String> answer = new ArrayList<String>(); combination(s , 0 , answer);//開始回溯 return answer; } public static void combination(String s1,int n, List<String> answer) { if (n == s1.length()) { answer.add(sb.toString()); return; } for (int i = 0; i < str[s1.charAt(n)-'0'].length(); i++) { sb.append(str[s1.charAt(n)-'0'].charAt(i)); combination(s1, n + 1, answer); sb.deleteCharAt(sb.length() - 1); } } }