1 条题解
-
0
思路与算法
忽略字母并统计十个数字的次数,按9到0逐个输出全部数字。
正确性说明
增加一个可用数字能增加位数且已有非零数字可放首位,所以全部数字都应使用。固定多重集按降序使字典序最大,也即相同位数整数最大,首位必非0。
复杂度
O(|s|+10)时间、O(1)计数空间(输入字符串O(|s|));结果通过字符流输出,不转整数。
易错点
多个0都要保留到末尾;百万位结果不能转成数值类型。
参考代码(C++11)
#include <bits/stdc++.h> using namespace std; int main() { string s; cin >> s; int cnt[10] = {}; for (char c : s) if (isdigit(c)) cnt[c - '0']++; for (int i = 9; i >= 0; i--) while (cnt[i]--) cout << i; cout << "\n"; }
- 1