1. 程式人生 > >LeetCode——電話號碼的字母組合(java)——回溯演算法

LeetCode——電話號碼的字母組合(java)——回溯演算法

給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。

給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。

示例:

輸入:"23"
輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

說明:
儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。

思路:一個排列組合問題,就是簡單的回溯思想,具體看程式碼:

import java.util.ArrayList;
import java.util.List;

public class 電話號碼的字母組合 {
	//測試
	public static void main(String[] args) {
		List<String> x = letterCombinations("23");
		System.out.println(x.toString());
	}
	
	//定義每個數字對應的字元
	static String[] a = new String[] {"","","abc","def",
			"ghi","jkl","mno","pqrs","tuv","wxyz"};
	static StringBuffer sb = new StringBuffer();
	
	public static List<String> letterCombinations(String digits) {
		if (digits.length() == 0) {
			return null;
		}
		List<String> answer = new ArrayList<String>();
		
		//開始回溯
		zuhe(digits , 0 , answer);
		return answer;
    }

	private static void zuhe(String digits , int n, List<String> answer) {
		if (n == digits.length()) {
			answer.add(sb.toString());
			return;
		}
		for (int i = 0; i < a[digits.charAt(n)-'0'].length(); i++) {
			sb.append(a[digits.charAt(n)-'0'].charAt(i));
			zuhe(digits, n + 1, answer);
			sb.deleteCharAt(sb.length() - 1);
		}
	}
}

相關推薦

LeetCode——電話號碼字母組合java——回溯演算法

給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。示例:輸入:"23" 輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 說明:儘管上面的答案是按字典序排列的

LeetCode 17. 電話號碼字母組合C++

給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。 給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。 示例: 輸入:"23" 輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce",

leetcode 17. 電話號碼字母組合 python 非遞迴

給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。示例:輸入:"23" 輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 說

17. 電話號碼字母組合swift

給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。 給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。 示例: 輸入:"23" 輸出:["ad", "ae",

小米2017秋招真題——電話號碼分身問題Java

imp spa ray 描述 mov lose port next can 原題描述如下: 通過對各個數字對應的英文單詞的分析,可以發現一些規律: 字母Z為0獨占,字母W為2獨占,字母U為4獨占,字母X為6獨占,字母G為8獨占; 在過濾一遍0、2、4、6、8後,字母O為1

leetcode:(167)Two Sum IIjava

題目:         Given an array of integers that is already sorted in ascending order, find two numbers such that they add up

LeetCode 771. 寶石與石頭java

pan 技術 多少 java lee 輸出 重復 因此 style 給定字符串J 代表石頭中寶石的類型,和字符串 S代表你擁有的石頭。 S 中每個字符代表了一種你擁有的石頭的類型,你想知道你擁有的石頭中有多少是寶石。 J 中的字母不重復,J 和 S中的所有字符都是字母。字

leetcode:搜尋排列陣列java

package LeetCode; /* 假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。 ( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。 搜尋一個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。 你可以假設陣列中

leetcode:括號生成java回溯實現

 應用於回溯思想:無非就是六個括號進行排列組合:也就是2^6;不是左括號就是右括號,然後進行一個一個的走不行則進行返回上一層。但是要控制住其中的左括號和右括號對應正常思想是先進行左括號所以左括號一定要比右括號多根據這個思想我進行寫程式碼經過不斷更改過測試; package

LeetCode 13.羅馬數字轉整數Java

題目描述: 羅馬數字包含以下七種字元: I, V, X, L,C,D 和 M。 字元 數值 I 1 V 5 X 10 L

LeetCode 9.迴文數Java

題目描述: 判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。

LeetCode 2.兩數相加Java

題目描述: 給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。 如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。 您可

LeetCode 1.兩數之和Java

題目描述: 給定一個整數陣列 nums 和一個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。 你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個陣列中同樣的元素。 示例: 給定 n

劍指offer:字串的組合java

    字串的組合:     給一個字串,比如ABC, 把所有的組合,即:A, B, C, AB, AC, BC, ABC, 都找出來。     解題思路:     假設我們想在長度為n的字串中求m個字元的組合。我們先從頭掃描字串的第一個字元。針對第一個字元,我們有

Java貪心演算法解決01揹包問題

問題描述如下: 給定n種物品和一個揹包。物品i的重量是Wi,其價值為Vi,揹包的容量為C。應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大? 經典的揹包問題,這次選用貪心演算法來解決 程式碼如下: package TXSF; import java.util

山東大學模式識別實驗javaKNN演算法

KNN演算法就是把待分類資料放在訓練集裡找出離他最近的K個元素(歐氏距離),然後看看其中哪個類最多,就將這個元素分為這個類。在本實驗中,使用數字資料集。每個數字含有一個二維陣列表示其中的畫素點,可以認為擁有M*N個特徵,只不過每個特徵只有0和1兩種值,表示該畫素點是否繪製。

貪婪演算法在求解最小生成樹中的應用JAVA--Kruskal演算法

Kruskal演算法又被稱為“加邊法”,這種演算法會將加權連通圖的最小生成樹看成具有V-1條邊的無環子圖,且邊的權重和最小。演算法開始時,會按照權重的非遞減順序對圖中的邊排序,之後迭代的以貪婪的方式新增邊。下面以下圖為例來講解Kruskal演算法的過程:Input:6 101

資料結構和演算法躬行記5——回溯演算法

  回溯演算法(backtracking)是一個類似列舉的搜尋嘗試過程,在尋找問題解的過程中,當發現不滿足求解條件時,就退回一步,嘗試其它路徑,該演算法的時間複雜度都不會低於 O(N!),複雜的例題包括正則表示式匹配、解數獨等。   在《回溯演算法詳解》一文中提到,解決一個回溯問題,實際上就是一個決策樹的遍歷

[LeetCode]17. 電話號碼字母組合Letter Combinations of a Phone Number

一、題目: LeetCode地址 給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。 給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。 示例: 輸入:"23" 輸出:["ad", "ae", "af", "bd", "be", "

Leetcode 17:電話號碼字母組合最詳細的解法!!!

給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。 給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。 示例: 輸入:"23" 輸出:["ad", "ae", "af", "bd", "be", "