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 };