LeetCode Letter Combinations of a Phone Number Backtracking (golang & java)

Problem
在这里插入图片描述
Analysis Process

1.Iterate over the letter corresponding to the first number
2.A new letter is added to each number
3.Adds the combined letters to the result set code until the numeric string is empty

as shown in the figure
在这里插入图片描述

Code
golang

func backtrack(combination,digits string,phone map[byte]string,res[]string)[]string{
     //if there is no more digits to check
     if len(digits)==0{
     // the combination is done
         res = append(res,combination)
     // if there are still digits to check
     }else{
     // iterate over all letters which map 
     // the next available digit
         for _,v:=range(phone[digits[0]]){
             res = backtrack(combination+string(v),digits[1:],phone,res)
         } // append the current letter to the combination
           // and proceed to the next digits
     }
     return res
}


func letterCombinations(digits string) []string {
    phone:=map[byte]string{}
    phone['2'] = "abc"
	phone['3'] = "def"
	phone['4'] = "ghi"
	phone['5'] = "jkl"
	phone['6'] = "mno"
	phone['7'] = "pqrs"
	phone['8'] = "tuv"
	phone['9'] = "wxyz"

    res:=[]string{}
    if digits!=""{
        res = backtrack("",digits,phone,res)
    }
    return res
}

java

class Solution {
  Map<String, String> phone = new HashMap<String, 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");
  }};

  List<String> output = new ArrayList<String>();

  public void backtrack(String combination, String next_digits) {
    // if there is no more digits to check
    if (next_digits.length() == 0) {
      // the combination is done
      output.add(combination);
    }
    // if there are still digits to check
    else {
      // iterate over all letters which map 
      // the next available digit
      String digit = next_digits.substring(0, 1);
      String letters = phone.get(digit);
      for (int i = 0; i < letters.length(); i++) {
        String letter = phone.get(digit).substring(i, i + 1);
        // append the current letter to the combination
        // and proceed to the next digits
        backtrack(combination + letter, next_digits.substring(1));
      }
    }
  }

  public List<String> letterCombinations(String digits) {
    if (digits.length() != 0)
      backtrack("", digits);
    return output;
  }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值