剣はOffer17を指します-1から最大のn桁まで印刷します-簡単

質問リンク

タイトル説明:

数値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;
    }
};

おすすめ

転載: blog.csdn.net/Yang_1998/article/details/113042318