Algorithm
Letter Combinations of a Phone Number
Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent.
A mapping of digit to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.Example:
Input: “23”
Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”,“cd”, “ce”, “cf”].
座机电话的按键上面有9个数字,其中2到9的数字按键上有英文字母,例如:按键2上标记着abc,按键9上标记着 wxyz。(具体的对照表可以找个座机看看,后面的代码中也会有)。
基本思路是递归,感觉也没有什么特别的,直接上代码:
static public IList<string> LetterCombinations(string digits)
{
List<string> result = new List<string>();
Dictionary<char, List<string>> dic_num = new Dictionary<char, List<string>>()
{
{ '2',new List<string>(){"a","b","c"}},
{ '3',new List<string>(){"d","e","f" }},
{ '4',new List<string>(){"g","h","i" }},
{ '5',new List<string>(){"j","k","l" }},
{ '6',new List<string>(){"m","n","o" }},
{ '7',new List<string>(){"p","q","r","s" }},
{ '8',new List<string>(){"t","u","v" }},
{ '9',new List<string>(){"w","x","y","z"}}
};
if (digits.Length == 0)
{
return result;
}
else if (digits.Length == 1)
{
return dic_num[digits[0]];
}
else if (digits.Length >= 2)
{
List<string> cur_list = dic_num[digits[0]];
IList<string> next_list = LetterCombinations(digits.Substring(1));
for (int i = 0; i < cur_list.Count; i++)
{
for (int j = 0; j < next_list.Count; j++)
{
result.Add(cur_list[i]+ next_list[j]);
}
}
}
return result;
}
Review
- 这周主要是看Jenkins的官网教程,简单的技术文章,上面的安装步骤说明很详细。
Tips&Share
- 这个星期尝试和学习了 Jenkins,准备部署的源码是 php 代码管理工具是 perforce。Docker 下安装 Jenkins,需要使用phing还需要安装php环境和phing插件和p4插件。需要注意的还有docker中容器的时间和系统时间同步。默认安装 Jenkins,容器中的时间和系统时间不一致。
- 最近在看极客时间-技术管理实战。在做一个新的项目或者任务的时候,需要考虑:技术选型成本,技术升级成本,问题查找成本和代码维护成本。很多时候是从负责人的角度出发,多哪个技术熟悉,或者更有信息,或者更容易上手。能实现目标就行,没有去考虑问题查找成本和代码维护成本。这也许就是我没做过大的项目,或者也做不好大项目。
- 在技术上时间投入和产出也许和心里的预期不一致,但是要静下心来,也是常听到的“努力不一定有结果,不努力就一定没有收获”
- 都已经到第11周了,算法一周一题,量不大,最简单的还是比较容易坚持,share和技术学习坚持有点难度。