wordpress建什么站网站改进建议有哪些
1.题目描述
2.思路
(1)组合不强调元素的顺序,所以[1,2,6]和[2,6,1]代表同一个数。
(2)排列强调元素之间的顺序,所以[1,2,6]和[2,6,1]代表不同的数。
(3)回溯通过递归的方式实现每一层的for循环,回溯算法可以抽象为树形结构。
3.代码实现
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import static jdk.nashorn.internal.objects.NativeString.charAt;public class H17 {public List<String> letterCombinations(String digits) {List<String> res = new ArrayList<>();if (digits.length() == 0) {return res;}Map<Character, String> m1 = new HashMap<>();m1.put('1', " ");m1.put('2', "abc");m1.put('3', "def");m1.put('4', "ghi");m1.put('5', "jkl");m1.put('6', "mno");m1.put('7', "pqrs");m1.put('8', "tuv");m1.put('9', "wxyz");StringBuffer sb=new StringBuffer();backtracking(res,m1,digits,0,sb);return res;}public void backtracking(List<String>res,Map<Character, String> m1,String digits,int index,StringBuffer cur){//确定递归的终止条件if(index==digits.length()) {res.add(cur.toString());// 将当前组合添加到结果列表中return ;}//获取输入的数字组合的单个数字char digit=digits.charAt(index);// 获取当前数字对应的字母字符串String letter=m1.get(digit);//获取数字所对应的字符串的长度int lettercnt=letter.length();for(int i=0;i<lettercnt;i++){// 添加当前字母cur.append(letter.charAt(i));//递归处理下一个数字backtracking(res,m1,digits,index+1,cur);// 回溯,移除最后一个字母//在回溯的时候,删除字符的索引应该是 cur.length() - 1 而不是 lettercnt - 1。这是因为 cur 可能已经发生变化,所以删除最后一个字符时应该基于 cur 当前的长度。cur.deleteCharAt(cur.length()-1);}}public static void main(String[] args){H17 test=new H17();String digits = "23";List<String> res=test.letterCombinations(digits);System.out.print(res);}}