leetcode 17 电话号码的字母组合
Posted 行尸走肉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 17 电话号码的字母组合相关的知识,希望对你有一定的参考价值。
原题点这里
知识点:List的复制:目的List的大小必须与源List的大小一致
List tmp = Arrays.asList(new Object[ans.size()]); Collections.copy(tmp,ans);
JDK8 以后,只有在放入数据后,List中存储数据的数组才会初始化,所以必须要放东西进去。
这样我们在取tmp内的元素时,做一下强制类型转换就行。
补充要给高级语法,装逼利器:
List<String> a = letterCombinations("23");
a.forEach(System.out::println);
说回这道题,官方题解用回溯法。其实不用这么麻烦。直接遍历一下就行。
public static List<String> letterCombinations(String digits) { List <StringBuffer> ans = new ArrayList<>(); String[] phone = {"", "","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; for(int i=0;i<digits.length();i++){ int idx = digits.charAt(i)-‘0‘; List tmp = Arrays.asList(new Object[ans.size()]); Collections.copy(tmp,ans); ans.clear(); for(int j=0;j<phone[idx].length();j++){ if(i==0){ ans.add(new StringBuffer().append(phone[idx].charAt(j))); continue; } for (Object oldS:tmp ) { StringBuffer s = (StringBuffer) oldS; StringBuffer newS = new StringBuffer().append(s).append(phone[idx].charAt(j)); ans.add(newS); }; } } List<String> res = new ArrayList<>(); for(StringBuffer r:ans){ res.add(r.toString()); } return res; }
以上是关于leetcode 17 电话号码的字母组合的主要内容,如果未能解决你的问题,请参考以下文章