zoukankan      html  css  js  c++  java
  • [leetcode]Letter Combinations of a Phone Number

    DFS,用C会更合适一些,用Java就要传很多的引用。在我看来,这个DFS就是递归。

    import java.util.ArrayList;
    import java.util.HashMap;
    
    public class Solution {
        public ArrayList<String> letterCombinations(String digits) {
            // Start typing your Java solution below
            // DO NOT write main() function
            ArrayList<String> ans = new ArrayList<String>();
        	ArrayList<Character> chars = new ArrayList<Character>();
        	HashMap<Character, String> map = new HashMap<Character, String>();
        	init(map);
            dfs(map, digits, 0, chars, ans);
            if (ans.size() == 0) ans.add("");
            return ans;
        }
        
        private void dfs(HashMap<Character, String> map, String digits, int idx, ArrayList<Character> chars, ArrayList<String> arr)
        {
        	if (idx >= digits.length()) return;
        	char c = digits.charAt(idx);
        	String s = map.get(c);
        	for (int i = 0; i < s.length(); i++) {
        		
        		if (idx == digits.length() - 1) {
        			chars.add(s.charAt(i));
        			StringBuilder sb = new StringBuilder();
        			for (char cc : chars) {
        				sb.append(cc);
        			}
        			arr.add(sb.toString());
        			chars.remove(chars.size() - 1);
        		}
        		else
        		{
        			chars.add(s.charAt(i));
                    dfs(map, digits, idx+1, chars, arr);
        			chars.remove(chars.size() - 1);
        		}
        	}
        }
        
        private void init(HashMap<Character, String> map)
        {
        	map.put('1', "");
        	map.put('2', "abc");
        	map.put('3', "def");
        	map.put('4', "ghi");
        	map.put('5', "jkl");
        	map.put('6', "mno");
        	map.put('7', "pqrs");
        	map.put('8', "tuv");
        	map.put('9', "wxyz");
        }
    }
    

    第二刷,这个其实类似于求全排列,适合DFS:

    class Solution {
    public:   
        vector<string> result;
        vector<string> letterCombinations(string digits) {
            string mapping[] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
            result.clear();
            string tmp;
            makeString(digits, mapping, tmp);
            return result;
        }
        
        void makeString(const string &digits, string mapping[], string &tmp)
        {
            int n = tmp.length();
            if (n == digits.length())
            {
                result.push_back(tmp);
                return;
            }
            int idx = digits[n] - '0' - 2;
            for (int i = 0; i < mapping[idx].length(); i++)
            {
                tmp.push_back(mapping[idx][i]);
                makeString(digits, mapping, tmp);
                tmp.pop_back();
            }
        }
    };
    

      

  • 相关阅读:
    Spark数据读取
    05、TypeScript 中的泛型
    04、TypeScript 中的接口
    03、TypeScript 中的类
    02、TypeScript 中的函数
    01、TypeScript 数据类型
    Vue-router 知识点
    什么是跨域?如何解决跨域问题
    工作中积累的问题、知识点总结100题(0-20)
    封装一个 Promise 对象。了解其原理
  • 原文地址:https://www.cnblogs.com/lautsie/p/3223329.html
Copyright © 2011-2022 走看看