No.17 Letter Combinations of a Phone Number
作者:互联网
17. 电话号码的字母组合 - 力扣(LeetCode) (leetcode-cn.com)
思路:一道普通的用回溯解决的组合问题,涉及到一些字符串的操作
用一个map_string存储,用下标的索引表示数字对应的字母
package leetcode.com.backTrack; import java.util.ArrayList; import java.util.List; public class Num17 { public static void main(String[] args) { Num17 tool = new Num17(); List<String> res = tool.letterCombinations("234"); for(String arr:res){ System.out.println(arr); } } public List<String> letterCombinations(String digits) { List<String> ans = new ArrayList<>(); if(digits=="" || digits.length()==1){ return ans; } String[] map_string = {"", "*", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; StringBuffer path = new StringBuffer(); backtrack(digits, 0, path, ans, map_string); return ans; } public void backtrack(String digits, int index, StringBuffer path, List<String> ans, String[] map_string){ /** * digits 表示输入的数字, eg: digits="23" * path存放字符串, 长度够了就加入 List<String> ans * letter 表示当前层可以选择的数字,eg: 第一层数字为2, 可选 letter=“abc" * index 表示选择当前层的哪一个digits中的数字 * ans用来存储答案 */ if(index == digits.length()){ ans.add(path.toString()); return; } char tmpWord = digits.charAt(index); int letterIdx = tmpWord - '0'; String letter = map_string[letterIdx]; for(int i=0; i<letter.length(); i++){ path.append(letter.charAt(i)); backtrack(digits, index+1, path, ans, map_string); path.deleteCharAt(path.length()-1); // 这个地方不是删除 i , 我感觉删除i就是删除末尾的,但是不对,得直接删除当前末尾的 } } }
。。。
标签:digits,No.17,String,List,Phone,ans,Combinations,path,string 来源: https://www.cnblogs.com/charonkk/p/15419851.html