-
Notifications
You must be signed in to change notification settings - Fork 0
/
电话号码的字母组合.cpp
84 lines (79 loc) · 2.07 KB
/
电话号码的字母组合.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include<stdio.h>
#include<iostream>
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
vector<string> letterCombinations(string digits) {
vector<string> results;
for(int i=0 ; i<digits.size() ; i++){
digits[i]-=2;
}
char ch[8][4]={
{'a','b','c'},
{'d','e','f'},
{'g','h','i'},
{'j','k','l'},
{'m','n','o'},
{'p','q','r','s'},
{'t','u','v'},
{'w','x','y','z'}
};
int total=1;
for(int i=0 ; i<digits.size() ; i++){
switch(digits[i]){
case'5':
case'7':
total*=4;
break;
default:
total*=3;
}
}
// cout<<total<<endl;
int times=1;
for(int i=0 ; i<digits.size() ; i++){ // ÿ´ÎÑ»·¼ÓÒ»ÁÐ
int len=0;
if(digits[i]-'0'!=5&&digits[i]-'0'!=7)
len=3;
else
len=4;
if(i!=0){
switch(digits[i-1]){
case'5':
case'7':
times*=4;
break;
default:
times*=3;
}
}
int call = total/len/times;
// cout<<"i : "<<i<<endl;
// cout<<digits[i]<<' '<<len<<' '<<times<<' '<<call<<endl;
for(int j=0 ; j<call ; j++){
for(int l=0 ; l<len ; l++)
for(int k=0 ; k<times ; k++){
if(i==0){
string s = "";
results.push_back(s+ch[digits[i]-'0'][l]);
}else{
// cout<<j*(len*times)+l*times+k<<endl;
results[j*(len*times)+l*times+k]+=ch[digits[i]-'0'][l];
}
}
}
// for(auto result:results){
// cout<<result<<endl;
// }
// cout<<"result size :"<<results.size()<<endl;
}
return results;
}
int main(){
string digits = "5678";
auto results = letterCombinations(digits);
for(auto result:results){
cout<<result<<endl;
}
return 0;
}