class Solution {
public:
int countSymmetricIntegers(int low, int high) {
}
};
7020. 统计对称整数的数目
给你两个正整数 low
和 high
。
对于一个由 2 * n
位数字组成的整数 x
,如果其前 n
位数字之和与后 n
位数字之和相等,则认为这个数字是一个对称整数。
返回在 [low, high]
范围内的 对称整数的数目 。
示例 1:
输入:low = 1, high = 100 输出:9 解释:在 1 到 100 范围内共有 9 个对称整数:11、22、33、44、55、66、77、88 和 99 。
示例 2:
输入:low = 1200, high = 1230 输出:4 解释:在 1200 到 1230 范围内共有 4 个对称整数:1203、1212、1221 和 1230 。
提示:
1 <= low <= high <= 104
原站题解
typescript 解法, 执行用时: 112 ms, 内存消耗: 50.7 MB, 提交时间: 2023-09-04 09:31:30
function countSymmetricIntegers(low: number, high: number): number { let ans = 0; for(let i = low; i <= high; i++) { let str = String(i); if(str.length % 2 == 0) { let half = str.length / 2; let sum = 0, _sum = 0; for(let i = 0; i < half; i++) { sum += +str[i]; _sum += +str[i+half]; } if(sum == _sum) ans++; } } return ans; };
cpp 解法, 执行用时: 168 ms, 内存消耗: 5.9 MB, 提交时间: 2023-09-04 09:30:13
class Solution { public: int countSymmetricIntegers(int low, int high) { int l=0; for(int i=low;i<=high;i++) { string i2s=to_string(i); int lengh=i2s.size(); if (lengh%2==0) { int sum_s=0; for(int j=0;j<lengh/2;j++) { sum_s+=i2s[j]-'0'; sum_s-=i2s[lengh-j-1]-'0'; } if(sum_s==0) l++; } else continue; } return l; } };
golang 解法, 执行用时: 24 ms, 内存消耗: 6 MB, 提交时间: 2023-09-04 09:29:37
func countSymmetricIntegers(low int, high int) (ans int) { for i := low; i <= high; i++ { s := strconv.Itoa(i) n := len(s) if n%2 > 0 { continue } sum := 0 for _, c := range s[:n/2] { sum += int(c) } for _, c := range s[n/2:] { sum -= int(c) } if sum == 0 { ans++ } } return }
python3 解法, 执行用时: 784 ms, 内存消耗: 16.1 MB, 提交时间: 2023-09-04 09:29:04
# 暴力算法 class Solution: def countSymmetricIntegers(self, low: int, high: int) -> int: ans = 0 for i in range(low, high + 1): s = str(i) n = len(s) ans += n % 2 == 0 and sum(map(int, s[:n // 2])) == sum(map(int, s[n // 2:])) return ans