https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/
코드설명
깊이우선탐색(DFS) + 구현(Implementation) 을 활용합니다.
먼저 number 배열에 각 전화번호의 정보를 넣습니다.
그리고 DFS로 전화번호 누른 칸의 각 모든 조합을 만들면 되겠지요.
StringBuilder를 활용하여 문자열 더하기의 시간을 줄여주는것이 중요합니다.
코드
import java.util.*; class Solution { String[][] number = new String[][] { {"0"}, {"0"}, {"a","b","c"}, {"d","e","f"}, {"g","h","i"}, {"j","k","l"}, {"m","n","o"}, {"p","q","r","s"}, {"t","u","v"}, {"w","x","y","z"} }; List<String> answer = new ArrayList<String>(); String Digits; String[] split; public List<String> letterCombinations(String digits) { Digits = digits; System.out.print(" "+number.length); for(int i=0; i<number.length; i++){ for(int j=0; j<number[i].length; j++){ System.out.print(number[i][j]+" "); } } if(digits.length() == 0) return new ArrayList<String>(); split = digits.split(""); int firstNum = Integer.parseInt(split[0]); for(int i=0; i<number[firstNum].length; i++){ StringBuilder sb = new StringBuilder(); sb.append(number[firstNum][i]); DFS(1, sb); } return answer; } void DFS(int level, StringBuilder str){ if(level == Digits.length()){ answer.add(str.toString()); return ; } int idx = Integer.parseInt(split[level]); for(int i=0; i<number[idx].length; i++){ StringBuilder newStr = new StringBuilder(str.toString()); DFS(level + 1, newStr.append(number[idx][i])); } } }