2843. 统计对称整数的数目(简单)

1,问题描述

2843. 统计对称整数的数目

难度:简单

给你两个正整数 lowhigh

对于一个由 2 * n 位数字组成的整数 x ,如果其前 n 位数字之和与后 n 位数字之和相等,则认为这个数字是一个对称整数。

返回在 [low, high] 范围内的 对称整数的数目

示例 1:

1
2
3
输入:low = 1, high = 100
输出:9
解释:在 1 到 100 范围内共有 9 个对称整数:11、22、33、44、55、66、77、88 和 99 。

示例 2:

1
2
3
输入:low = 1200, high = 1230
输出:4
解释:在 1200 到 1230 范围内共有 4 个对称整数:1203、1212、1221 和 1230 。

提示:

  • 1 <= low <= high <= 10^4

2,初步思考

​ 查看了它的数据量级,直接暴力求解

3,代码处理

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
package days;

public class _2843统计对称整数的数目 {

// 暴力解法
// 时间复杂度:O(n),空间复杂度:O(1)
public int countSymmetricIntegers_brute(int low, int high) {
int cnt = 0;
for (int i = low; i <= high; i++) {
if (isSymmetric(i)) {
cnt++;
}
}
return cnt;
}

private boolean isSymmetric(int num) {
String string = String.valueOf(num);
int n = string.length();
if(n%2==1) return false;
int half = n>>1;
char[] charArray = string.toCharArray();
int sum = 0;
for (int i = 0; i < half; i++) {
sum += charArray[i]-'0';
sum -= charArray[n-1-i]-'0';
}
return sum == 0;
}

public static void main(String[] args) {
_2843统计对称整数的数目 solution = new _2843统计对称整数的数目();
System.out.println(solution.countSymmetricIntegers_brute(1, 100));
System.out.println(solution.countSymmetricIntegers_brute(1200, 1230));
}
}