题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一个范围,统计这其中所有的对称整数的数目,对称整数要求有 2*n 位,n是整数,而且前n位数字之和与后n位数字之和相等。

思路分享

  • 首先是普通的枚举法,毕竟本题是 easy,数字范围不大,暴力即可 ac。不过如何优雅简洁地暴力也是一门学问,如果是陆爻齐原来的想法,很可能会通过逐位模十来获取位数,但实际上处理数位用字符串更合适,结合上 reduce 函数可以间接地求得数位和,就有了下面的枚举写法。

  • 接下来使用数位 dp 就可以解决当数字范围大时候的问题,但安排紧张,就先这样罢,要是能有时间把灵山的慢慢过就好力。

代码解答(强烈建议自行解答后再看)

  • 枚举法
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
int countSymmetricIntegers(int low, int high) {
int result = 0;
for (int i = low; i < high+1; i++) {
string tmp_s = to_string(i);
if (tmp_s.size() % 2 == 0 && (reduce(tmp_s.begin(), tmp_s.begin() + tmp_s.size()/2) == reduce(tmp_s.begin() + tmp_s.size()/2, tmp_s.end()))) {
result++;
}
}
return result;
}
};