题目描述
得建立映射,其实用数组来建立也行,看起来还比较直观。
代码 & 思路
理好DFS的过程就行,整体思路不难 当递归字符length = 1时,递归结束
class Solution { public List < String > letterCombinations ( String digits) { List < String > ans = new ArrayList < > ( ) ; Map < Character , String > hashmap = new HashMap < > ( ) ; hashmap. put ( '2' , "abc" ) ; hashmap. put ( '3' , "def" ) ; hashmap. put ( '4' , "ghi" ) ; hashmap. put ( '5' , "jkl" ) ; hashmap. put ( '6' , "mno" ) ; hashmap. put ( '7' , "pqrs" ) ; hashmap. put ( '8' , "tuv" ) ; hashmap. put ( '9' , "wxyz" ) ; if ( digits. length ( ) == 0 ) { return ans; } deal ( hashmap, digits, new StringBuilder ( ) , ans) ; return ans; } void deal ( Map < Character , String > hashmap, String digits, StringBuilder nowString, List < String > ans) { if ( digits. length ( ) == 0 ) { ans. add ( nowString. toString ( ) ) ; return ; } for ( char ch : hashmap. get ( digits. charAt ( 0 ) ) . toCharArray ( ) ) { deal ( hashmap, digits. substring ( 1 , digits. length ( ) ) , new StringBuilder ( nowString) . append ( ch) , ans) ; } }
}
假设m为对应3个字母的数字的数量,n为对应4个字母的数字的数量 时间复杂度为O(3m3^m 3 m * 4n4^n 4 n ),因为每种情况都要遍历到 空间复杂度O(m + n),构造的答案的长度