一、Problem
输入
输入一行包含一个整数 n。
输出
输出一行,包含一个整数,表示满足条件的数的和。
输入
1200
输出
2616
二、Solution
方法一:枚举 + 剪枝
- 数字长度必须为偶数。
- 其它…
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{
static class Solution {
void init() {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int n = sc.nextInt();
if (n < 11) {
System.out.println(0);
return;
}
long sum = 0;
for (int i = 11; i <= n; i++) {
String s = i + "";
if (s.length() % 2 != 0)
continue;
int h = s.length() >>> 1;
String sub1 = s.substring(0, h);
String sub2 = s.substring(h, s.length());
if (sub1.equals(sub2))
sum += i;
}
System.out.println(sum);
}
}
public static void main(String[] args) throws IOException {
Solution s = new Solution();
s.init();
}
}
复杂度分析
- 时间复杂度: O ( n 2 ) O(n^2) O(n2),
- 空间复杂度: O ( 1 ) O(1) O(1),
方法二:规律
- 从两端向中间逼近…
- 如果 i 是 n 位数.则判断 i % 1 0 n i\%10^n i%10n 是否等于 i 1 0 n \frac{i}{10^n} 10ni,等于则满足条件。
...
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n),
- 空间复杂度: O ( n ) O(n) O(n),