アルゴリズム:電話は、文字の組み合わせの文字コンビネーション・オブ・電話番号内の桁をダイヤルバック

タイトル

住所:
https://leetcode.com/problems/letter-combinations-of-a-phone-number/

描述:
2-9包括から数字を含む文字列を考えると、数が表すことができることをすべての可能な文字の組み合わせを返します。

(ちょうど電話ボタンのような)の文字に数字のマッピングは以下のとおりです。1は、任意の文字にマップされないことに注意してください。
ここに画像を挿入説明

例:

Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

注意:

上記の答えが辞書式順序であるが、あなたの答えは、あなたが望む任意の順序である可能性があります。

すべてのソリューションの配列をこのトピック後戻り液、終了条件を再帰的に注意を払います。

トラバーサルソリューション

注文執行分解:

  1. 二次元配列の初期化char[][] mapの関係、デジタルストレージおよび文字は、map[digit - '2']文字列を取得します。
  2. 文字列トラバーサルList新しい文字(文字列を横断起因する文字)を通ってスプライシング、。
public List<String> letterCombinationWithIterate(String digits) {
    List<String> result = new ArrayList<>();
    if (digits == null || digits.length() == 0) {
      return result;
    }

    char[][] map = new char[8][];
    map[0] = "abc".toCharArray();
    map[1] = "def".toCharArray();
    map[2] = "ghi".toCharArray();
    map[3] = "jkl".toCharArray();
    map[4] = "mno".toCharArray();
    map[5] = "pqrs".toCharArray();
    map[6] = "tuv".toCharArray();
    map[7] = "wxyz".toCharArray();

    result.add("");
    for (char digit: digits.toCharArray()) {
      result = append(result, map[digit - '2']);
    }

    System.out.println("result > " + Arrays.toString(result.toArray()));

    return result;
  }

  private List<String> append(List<String> lastList, char[] charArray) {
    List<String>  nextList = new ArrayList<>();
    for (String s: lastList) {
      for (char c: charArray) {
        nextList.add(s + c);
      }
    }

    return nextList;
  }

バックトラックアルゴリズム

分解をバックトラック:

  1. 戻る輸出nextDigits == null || nextDigits.length() == 0
  2. combinationこれは、モザイクの累積結果であります
Map<Character, String> phone = new HashMap<Character, String>() {{
    put('2', "abc");
    put('3', "def");
    put('4', "ghi");
    put('5', "jkl");
    put('6', "mno");
    put('7', "pqrs");
    put('8', "tuv");
    put('9', "wxyz");
  }};

  private List<String> resultList = new ArrayList<>();

  public List<String> letterCombinationsWithBacktrack(String digits) {
    if (digits == null || digits.length() == 0) {
      return resultList;
    }
    backTrack("", digits);

    return resultList;
  }

  public void backTrack(String combination, String nextDigits) {
    if (nextDigits == null || nextDigits.length() == 0) {
      resultList.add(combination);
      return;
    }
    char c = nextDigits.charAt(0);
    for (char item: phone.get(c).toCharArray()) {
      backTrack(combination + item, nextDigits.substring(1));
    }
  }


ダウンロード

https://github.com/zgpeace/awesome-java-leetcode/blob/master/code/LeetCode/src/backtracking/LetterCombinationsOfAPhoneNumber.java

公開された127元の記事 ウォン称賛12 ビュー20000 +

おすすめ

転載: blog.csdn.net/zgpeace/article/details/103580314