1. 程式人生 > 實用技巧 >【LeetCode-字串】列印從1到最大的n位數

【LeetCode-字串】列印從1到最大的n位數

題目描述

輸入數字 n,按順序打印出從 1 到最大的 n 位十進位制數。比如輸入 3,則打印出 1、2、3 一直到最大的 3 位數 999。
示例:

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

題目連結: https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/

思路

使用大數加法。程式碼如下:

class Solution {
public:
    vector<int> printNumbers(int n) {
        if(n==0) return {};

        vector<int> ans;
        n = pow(10, n);
        string cur = "0";
        for(int i=1; i<n; i++){
            cur = add(cur, "1");
            ans.push_back(stoi(cur));
        }
        return ans;
    }

    string add(string cur, string one){
        int carry = 0;
        int i = cur.size()-1;
        int j = one.size()-1;
        string sum = "";
        while(i>=0 || j>=0){
            int x = i>=0? cur[i--]-'0':0;
            int y = j>=0? one[j--]-'0':0;
            int s = x+y+carry;
            carry = s/10;
            sum = to_string(s%10)+sum;
        }
        if(carry!=0) sum = "1" + sum;
        return sum;
    }
};
  • 時間複雜度:O(nlogn)
  • 空間複雜度:O(1)