题目的主要信息:

  • 有数列为:9,99,999,...,9999999999(10个9)
  • 用循环的方式求这个数列的和

具体做法:

该数列第一个数为a1=9a_1=9a1=9,后续递推公式为ai=ai110+9a_i=a_{i-1} * 10 + 9ai=ai110+9,其中1<i<111<i<111<i<11

有了递推公式,我们可以从9开始,循环10次,每次累加结果,并根据累加公式求出下一个元素的值。

为了防止累加和越界,我们最好使用long而非int。 alt

public class Main {
    public static void main(String[] args) {
        long sum = 0;
        long base = 9; //以9为基数
        for(int i = 0; i < 10; i++){ //一共十个数字
            sum += base; //累加数列
            base = base * 10 + 9; //当前数列乘10加9就是下一个数列
        }
        System.out.println(sum);
    }
}

复杂度分析:

  • 时间复杂度:O(1)O(1)O(1),10次循环,常数级别
  • 空间复杂度:O(1)O(1)O(1),无额外空间