【LeetCode-字串】列印從1到最大的n位數
阿新 • • 發佈:2020-08-13
題目描述
輸入數字 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)