【數論】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(n2)O(n^2)
  • 空間複雜度:O(1)O(1)

方法二:規律

  • 從兩端向中間逼近…
  • 如果 i 是 n 位數.則判斷 i%10ni\%10^n 是否等於 i10n\frac{i}{10^n},等於則滿足條件。
...

複雜度分析

  • 時間複雜度:O(n)O(n)
  • 空間複雜度:O(n)O(n)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章