找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
宇哥帮你零基础建设外贸独立站
宇哥淘宝虚拟类目-付费微信群
宇哥闲鱼3个月陪跑课
Access数据库-零基础入门课程
Access数据库-自用软件开发课程
Access数据库-即学即用课程
Access数据库-进销存课程
Access数据库-VBA入门课程
Access数据库-陪跑课程
查看: 729|回复: 0

C#编程练习:力扣算法第17题-电话号码的字母组合

[复制链接]

115

主题

15

回帖

633

积分

管理员

积分
633
发表于 2024-7-5 14:56:05 | 显示全部楼层 |阅读模式
力扣算法17. 电话号码的字母组合
本文讲解用C#语言对于这道题的解法:
1.题干部分
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。
给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。
示例 1:
输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
输入:digits = ""输出:[]
示例 3:
输入:digits = "2"
输出:["a","b","c"]
提示:0 <= digits.length <= 4
digits 是范围 ['2', '9'] 的一个数字。
答案演示示例:

完整代码:
  1. static string[] lettersArr = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
  2. string digits;
  3. IList<string> combinations;

  4. public IList<string> LetterCombinations(string digits)
  5. {
  6.     this.digits = digits;
  7.     this.combinations = new List<string>();
  8.     if (digits.Length == 0)
  9.     {
  10.         return combinations;
  11.     }
  12.     Backtrack(0, new StringBuilder());
  13.     return combinations;
  14. }

  15. public void Backtrack(int index, StringBuilder combination)
  16. {
  17.     if (index == digits.Length)
  18.     {
  19.         combinations.Add(combination.ToString());
  20.     }
  21.     else
  22.     {
  23.         int digit = digits[index] - '0';
  24.         string letters = lettersArr[digit];
  25.         foreach (char c in letters)
  26.         {
  27.             combination.Append(c);
  28.             Backtrack(index + 1, combination);
  29.             combination.Length--;
  30.         }
  31.     }
  32. }
复制代码

代码解释:
以下是代码的详细说明:
1.静态数组 lettersArr:
这个数组定义了每个数字对应的字母组合。数组的索引代表数字,值是该数字对应的字母字符串。例如,索引 2 对应 "abc",索引 3 对应 "def"。
static string[] lettersArr = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz" };
2.变量声明:
  • digits:输入的数字字符串。
  • combinations:用于存储所有可能的字母组合。

string digits;
IList<string> combinations;
3.主函数 LetterCombinations:
这个函数接收一个数字字符串digits,并返回所有可能的字母组合。
public IList<string> LetterCombinations(string digits)
{
    this.digits = digits;
    this.combinations = new List<string>();
    if (digits.Length == 0)
    {
        return combinations;
    }
    Backtrack(0, new StringBuilder());
    return combinations;
}
  • 首先,初始化 digits 和 combinations。
  • 如果 digits 是空的,直接返回空列表 combinations。
  • 调用递归函数 Backtrack 开始生成组合。

4.递归函数 Backtrack:这个函数用于递归生成所有的字母组合。
public void Backtrack(int index, StringBuilder combination)
{
    if (index == digits.Length)
    {
        combinations.Add(combination.ToString());
    }
    else
    {
        int digit = digits[index] - '0';
        string letters = lettersArr[digit];
        foreach (char c in letters)
        {
            combination.Append(c);
            Backtrack(index + 1, combination);
            combination.Length--;
        }
    }
}
终止条件:
如果 index 等于 digits 的长度,说明已经生成了一组完整的组合,将其加入 combinations 列表中。
递归过程:
获取当前数字对应的字母字符串。对每个字母:将字母添加到当前组合中。递归调用 Backtrack 处理下一个数字。递归返回后,移除最后一个字母(进行回溯操作)。
通过这种方式,递归地生成所有可能的字母组合并存储在 combinations 列表中。

作者介绍:
宇哥副业是一名央企总部员工,电力工程师。
主业是一名编程培训讲师、电商从业者和电商讲师。
目前运营有3家淘宝店、6家闲鱼店、2家抖店、1家亚马逊(没生意),以及10多个自媒体平台和2个个人网站。
目前来看,全网学习办公软件和编程的女同学几乎没有不认识我的,但我更希望全网搞电商的女同学也都认识我。
现在宇哥做电商做培训还是比较顺的,而且主业还上班,目前一年到手的收入加起来有100来个。本来可以躺平,但是由于个人情绪一直不稳定、精神状态时好时坏,因此挺爱吐吐槽、码码字,挺愿意分享的。
我未来的打算是回老家做跨境,一边过退休生活,一边赚点躺着赚钱的生意。另外我计划每年写100万字不糊弄事的精品文章,包括宇哥的人生经验、做技术培训的经验、做电商的经验、做自媒体的经验,都分享给大家。
写作是为了流传后世,能帮助一些人最好。帮不上就当是给自己看了。
承蒙大家厚爱,很多人爱看。
谢谢大家。

宇哥课程广告
(长按二维码进入店铺,了解Access课程目录和介绍,点击订阅直接购买并观看录播课)
Access零基础教程299.99元
Access开发教程799.99元Access即学即用教程299.99元
Access进销存教程199.99元Access陪跑教程1599.99元VBA教程299.99元
有详细问题请加宇哥微信:datamap1999


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

access开发
Access进销存
Access即学即用
Access零基础
access陪跑

QQ|小黑屋|宇哥编程论坛 ( 京ICP备2022024677号-2|京公网安备11011202100561号 )

GMT+8, 2024-12-23 07:36 , Processed in 0.101795 second(s), 23 queries .

Powered by 宇哥

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表