剑指 Offer 17. 打印从1到最大的n位数
难度简单88
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
示例 1:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
说明:
- 用返回一个整数列表来代替打印
- n 为正整数
或者class Solution {public:void DFS(int index, int len, vector<int>& ans, string& s){if(index == len){int x = stoi(s);if(x != 0)ans.emplace_back(x);return;}for(int i = 0; i <= 9; ++ i){s[index] = '0' + i;DFS(index + 1, len, ans, s);}}vector<int> printNumbers(int n) {vector<int> ans;string s(n, '0');DFS(0, n, ans, s);return ans;}};
class Solution {public:void DFS(int index, int len, vector<int>& ans, string& s){if(index == len){turnToInt(ans, s);return;}for(int i = 0; i <= 9; ++ i){s[index] = '0' + i;DFS(index + 1, len, ans, s);}}void turnToInt(vector<int>& ans, string s){int n = s.size();int res = 0;string tmp = "";bool zerobegin = true;for(int i = 0; i < n; ++ i){if(zerobegin && s[i] != '0'){zerobegin = false;}if(!zerobegin){tmp += s[i];}}//不是全0if(tmp != ""){int x = stoi(tmp);ans.push_back(x);}}vector<int> printNumbers(int n) {vector<int> ans;string s(n, '0');DFS(0, n, ans, s);return ans;}};
