タイトル説明:
数値nを入力し、1から最大n桁の10進数の順に出力します。たとえば、3を入力すると、1、2、3から最大の3桁までが印刷されます999
テストケース:
输入: n = 1
输出: [1,2,3,4,5,6,7,8,9]
説明:
用返回一个整数列表来代替打印
n 为正整数
問題解決のアイデア:
ええと、n> 10である限り、この質問は大きな数を考慮する必要があります。直接出力する場合は、外出するときに左に曲がってください。
dfs、完全な配置、1つのポイントに注意を払う必要があります。0の数字で始めないでください。
デモ:
ACコード(c ++)
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void dfs(int pos, string s, int n,vector<int> & arr)
{
if (pos == n)
{
if(s != "") {
int num = 0;
for(int i = 0;i < s.size();i++){
num = num *10 + (s[i]-'0');
}
arr.push_back(num);
}
return;
}
for (int i = 0; i <= 9; i++)
{
if(s != "" || (s == "" && i != 0))
s += to_string(i);
dfs(pos + 1,s,n,arr);
s = s.substr(0, s.size()-1);
}
}
vector<int> printNumbers(int n) {
vector<int>arr;
dfs(0,"",n,arr);
return arr;
}
};