劍指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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章