Code & Func
2017-10-06

打卡,第13天

昨晚贼晚睡,然后今天就快吃午饭才起来,然后我又躺尸了一个下午。。。

今天刷了一道Medium的题目—— Letter Combinations of a Phone Number,不过感觉好水,就和学校oj一样水。。。

Given a digit string, 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. Input

string “23” Output: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. Note: Although the above answer is in lexicographical order, your answer could be in any order you want.

恩,大概思路就是要求letterCombinations(digits),我们就需要求letterCombinations(digits.substr(0,n-1).

然后把这个思路转换迭代的方式就成了:

1
vector<string> letterCombinations(string digits) {
2
static vector<string> sMap {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
3
vector<string> ret;
4
if (digits.size() == 0) return ret;
5
ret.push_back("");
6
for(int i = 0;i < digits.size();i++) {
7
vector<string> now;
8
for(auto c:sMap[digits[i] - '0']) {
9
for(auto s:ret)
10
now.push_back(s+c);
11
}
12
ret.swap(now);
13
}
14
return ret;
15
}

思路很简单,实现起来也很简单,没什么好提的,而且dicuss中的思路也很这个差不多,不过还是总结一下吧:

  • c++ 中 charstring真心麻烦:

    • stringstream很优雅,但是也很麻烦,而且只适用于要平凡从尾部插入的情况,不过这个方法结合io可以做很多漂亮的转换
    • "" + c,之前的时候用的时候好像是可以的,但是刚才在做题的时候是不行的会出现一些奇怪的字符串。
    • 最后是比较简单,可以常用的方法:string(1,c),可以把1换成其他数字以获取有重复字符的字符串。
  • 然后是在dicuss中看到的vectorswap方法,有些情况应该还是不错的,可以提高效率,它应该是直接交换底层指针。

上一条动态