216. Combination Sum III
- 思路
-
java class Solution { // global parameters List> result = new ArrayList(); LinkedList path = new LinkedList(); int sum = 0; public List> combinationSum3(int k, int n) { helper(k, n, 0, 1); return result; } private void helper(int k, int n, int sum, int startIndex){ //减枝之后加上去的中止条件 if(sum > n){ return; } //中止条件 if(path.size() == k && sum == n){ result.add(new ArrayList(path)); return; } //for循环横向遍历,这里是减枝后的,原始为i
17. Letter Combinations of a Phone Number
- 思路
-
java class Solution { List result = new ArrayList(); StringBuilder temp = new StringBuilder(); public List letterCombinations(String digits) { if(digits == null || digits.length() == 0){ return result; } String[] numString = {"", "", "abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; helper(digits, numString, 0); return result; } private void helper(String digits, String[] numString, int index){ if(index == digits.length()){ result.add(temp.toString()); return; } String str = numString[digits.charAt(index) - '0'];//横向遍历(for循环)之前就已经把string选出来了,所以之后for循环遍历也只要从0开始就可以了 for(int i = 0; i < str.length(); i++){ temp.append(str.charAt(i)); helper(digits, numString, index + 1);//这里不是i+1,由于i =0 开始,如果i+1, 永远都是0+1,也就是说,从第一个数之后,digits.charAt(index)不管几遍取的都是第二位的数,如23456,取的永远是2333 temp.deleteCharAt(temp.length()-1); } } } //也可以把 String str = numString[digits.charAt(index) - '0']放到循环里面 class Solution { List result = new ArrayList(); StringBuilder temp = new StringBuilder(); public List letterCombinations(String digits) { if(digits.length() == 0){ return result; } String[] numString = {"","", "abc", "def", "ghi", "jkl", "mno", "pqrs","tuv", "wxyz"}; helper(digits, numString, 0); return result; } private void helper(String digits, String[] numString, int index){ if(index == digits.length() && temp.length() == digits.length()){ result.add(temp.toString()); return; } for(int i = index; i < digits.length(); i++){ String str = numString[digits.charAt(i) - '0']; //str = "abc" for(char c : str.toCharArray()){ temp.append(c); //temp = "a" helper(digits, numString,i+1 ); temp.deleteCharAt(temp.length()- 1); } } } }
-