剑指Offer-打印从1到最大的n位数

49.打印从1到最大的n位数

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。

示例 1:

输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]

思路

要打印的范围其实1到是10的n次幂-1。求幂,可以使用快速幂加快速度。将时间复杂度降低到O(logN)

class Solution {
     
    public int[] printNumbers(int n) {
     
        if(n<1)
        {
     
            return new int[0];
        }
        int res=1;
        int x=10;
        //整数快速幂
        while(n>0)
        {
     
            if((n&1)==1)
            {
     
                res=res*x;
            }
            x=x*x;
            n>>=1;
        }

        int[] arr=new int[res-1];
        int index=0;
        //打印结果集
        for(int i=1;i<res;i++)
        {
     
            arr[index++]=i;
        }
        return arr;
    }
}

你可能感兴趣的:(数据结构与算法)