LC-423 从英文重建原始数字

目的:

给出一个已打乱的可以组成英文数字的字符串,输出里面包含什么数字,按降序输出

思路:

利用数学统计学与方程求解:

zero   0
one    1
two    2
three  3
four   4
five   5
six    6
seven  7
eight  8
nine   9

e  0, 1, 3, 5, 7, 8, 9
f  4, 5
g  8
h  3, 8
i  5, 6, 8, 9
n  1, 7, 9
o  0, 1, 2, 4
r  0, 3, 4
s  6, 7
t  2, 3, 8
u  4
v  5, 7
w  2
x  6
z  0

4 = u
2 = w
6 = x
0 = z
8 = g
5 = f - 4
7 = s - 6
3 = r - 0 - 4
1 = o - 0 - 2 - 4
9 = i - 5 - 6 - 8

代码:

 1 class Solution {
 2 public:
 3     string originalDigits(string s) {
 4         int nums[10] = {0};
 5         int count[26] = {0};
 6         for (int i = 0; i < s.length(); i++) {
 7             count[s[i] - 'a']++;
 8         }
 9         nums[0] = count['z' - 'a']; // 0 = z
10         nums[2] = count['w' - 'a']; // 2 = w
11         nums[4] = count['u' - 'a']; // 4 = u
12         nums[6] = count['x' - 'a']; // 6 = x
13         nums[8] = count['g' - 'a']; // 8 = g
14         nums[5] = count['f' - 'a'] - nums[4]; // 5 = f - 4
15         nums[7] = count['s' - 'a'] - nums[6]; // 7 = s - 6
16         nums[3] = count['r' - 'a'] - nums[0] - nums[4]; // 3 = r - 0 - 4
17         nums[1] = count['o' - 'a'] - nums[0] - nums[2] - nums[4]; // 1 = o - 0 - 2 - 4
18         nums[9] = count['i' - 'a'] - nums[5] - nums[6] - nums[8]; // 9 = i - 5 - 6 - 8
19         string result;
20         for (int i = 0; i < 10; i++) {
21             for (int j = 0; j < nums[i]; j++) {
22                 result += to_string(i);
23             }
24         }
25         return result;
26     }
27 };

猜你喜欢

转载自www.cnblogs.com/leo-lzj/p/9928090.html