【数论】C045_你好,2020(枚举+剪枝 / 双指针)

一、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 ( 1 ) O(1)

方法二:规律

  • 从两端向中间逼近…
  • 如果 i 是 n 位数.则判断 i % 1 0 n i\%10^n 是否等于 i 1 0 n \frac{i}{10^n} ,等于则满足条件。
...

复杂度分析

  • 时间复杂度: O ( n ) O(n)
  • 空间复杂度: O ( n ) O(n)
原创文章 787 获赞 314 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43539599/article/details/105826792