leetcode prouver l'offre de sécurité 17. impression de 1 au nombre maximum de bits n

Entrez le numéro n, l'impression maximale de 1 à l'ordre décimal n bits. Par exemple, l'entrée 3, puis imprimer jusqu'à un maximum de 1, 2, 3 chiffres 999.

Exemple 1:
Entrée: n = 1
Sortie: [1,2,3,4,5,6,7,8,9]
 
Description:
en renvoyant une liste de nombres entiers au lieu d'imprimer
n est un nombre entier positif

Dans un grand nombre pour la solution de
l'écrit par une lc personne. . . Certes un peu difficile à comprendre
 

class Solution {
public:
    vector<int> res;
    vector<int> printNumbers(int n) {
        if (n <= 0) return res;
        //创建一个能容纳最大值的字符数组,由于有一位要存储'\0',因此要开大一格
        char* number = new char[n + 1];
        //初始全部设置为0
        memset(number, '0', n);
        number[n] = '\0';//第n位设为'\0'
        while (!Increment(number)){
            PrintNumber(number);
        }
        delete[]number;//注意要释放内存
        return res;
    }
    bool Increment(char* number) {//形参传递char*指针
        bool isOverflow = false;//检测是否越界
        int nTakeOver = 0;//存储进位
        int nLength = strlen(number);//长度为n,不是n+1
        for (int i = nLength - 1; i >= 0; i--){
            int nSum = number[i] - '0' + nTakeOver;
            if (i == nLength - 1){
                //如果是第一位,进位
                nSum++;
            }
            if (nSum >= 10){
                //有进位
                if (i == 0){
                    //如果是最高位有进位,说明超过了给定得到最大值,越界
                    isOverflow = true;
                }
                else{
                    //非最高位有进位
                    nTakeOver = 1;
                    number[i] = nSum - 10 + '0';//对第i位进行设置
                }
            }
            else{
                //没有进位
                //设置第i位数字
                //并直接跳出循环
                number[i] = nSum + '0';
                break;
            }
        }
        return isOverflow;
    }
    void PrintNumber(char* number){
    //形参传递char*指针,此处改变形参number指向的位置,不会使原始的number指针所指位置改变

        string s = "";
        bool isBegin0 = true;
        while (*number != '\0'){
            if (isBegin0 && *number != '0') isBegin0 = false;
            //碰到'0',则不输出
            if (!isBegin0){
                s += *number;
            }
            number++;
        }
        int num = stoi(s);//转为整数
        res.push_back(num);
    }
};


Je suppose que tu aimes

Origine www.cnblogs.com/islch/p/12620383.html
conseillé
Classement