Java 题解 | #牛名生成器#

牛名生成器

https://www.nowcoder.com/practice/f82fe408de8f4fbdbc30162d6b3e65bb

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param digits string字符串
     * @return string字符串一维数组
     */
    private String[] nameMap = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};

    public String[] letterCombinations(String digits) {
        List<String> result = new ArrayList<>();
        if (digits == null || digits.length() == 0) {
            return result.toArray(new String[0]);
        }
        backTracking("", 0, digits, result);
        return result.toArray(new String[0]);
    }

    private void backTracking(String prefix, int id, String digits,
                              List<String> result) {
        if (id == digits.length()) {
            result.add(prefix);
            return;
        }

        int curNum = digits.charAt(id) - '0';
        String name = nameMap[curNum];

        for (char c : name.toCharArray()) {
            backTracking(prefix + c, id + 1, digits, result);
        }
    }
}

编程语言是Java。

这段代码解决的问题是给定一个由数字组成的字符串,要求生成该数字串所对应的所有可能的字母组合。

这段代码主要考察了回溯算法。回溯算法是一种通过不断尝试各种可能性来解决问题的算法,通常用于求解组合、排列等问题。

该代码的文字解释如下:

  1. backTracking 接受当前的字母组合前缀 prefix、当前处理的位置 id、输入的数字字符串 digits 以及保存结果的列表 result
  2. 当 id 达到字符串长度时,将当前的 prefix 加入到结果列表中,表示已经生成了一个完整的字母组合。否则,根据当前位置的数字,获取对应的字母串 name
  3. 遍历 name 中的每个字母,在 prefix 后添加该字母,并递归调用 backTracking 来处理下一个位置。
  4. 在递归调用结束后,需要将 prefix 恢复到之前的状态,以便尝试下一个字母。
全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务