您的位置:首页 > 其它

[Leetcode]#17 Letter Combinations of a Phone Number

2015-09-02 06:35 567 查看
//#17 Letter Combinations of a Phone Number
//4ms 6.39%
class Solution {
public:
vector<string> letterCombinations(string digits)
{

if(digits.empty())
{
vector<string> r;
return r;
}

vector<string> v(10, "");
v[0] = " ";
v[1] = "1";
v[2] = "abc";
v[3] = "def";
v[4] = "ghi";
v[5] = "jkl";
v[6] = "mno";
v[7] = "pqrs";
v[8] = "tuv";
v[9] = "wxyz";

int string_length = digits.size();
//cout << "string_length == " << string_length << endl;
int vector_length(1);
for(int i=0; i<string_length; i++)
{
vector_length = vector_length * v[ int (digits[i] - '0') ].size();
}
//cout << "vector_length == " << vector_length << endl;

string s(string_length, '0');
vector<string> r(vector_length, s);
//cout << "typical s == " << s << endl;

int block_number(1);
for(int i=0; i<string_length; i++)
{
int this_string_size = v[ int (digits[i] - '0') ].size();
//cout << "this_string_size == " << this_string_size << endl;
int segment_number = (vector_length/block_number) / this_string_size;
//cout << "segment_number == " << segment_number << endl;
for(int j=0; j<block_number; j++)
{
for(int k=0; k<this_string_size; k++)
{
for(int l=0; l<segment_number; l++)
{
r[j*(vector_length/block_number) + k*segment_number + l][i] = v[ int (digits[i] - '0') ][k];
}
}
}
block_number = block_number * this_string_size;
//cout << "finish of " << i << endl;
}
//cout << "ok?\n";
return r;

}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode string