面试题17:打印从1到最大的n位数

打印从1到最大的n位数

题目描述

输入数字n,打印从1到最大n位数的十进制

//实现在字符串上+1
//注意字符串右到左 n->0
bool  Increment(char *number)
{
    bool isOverflow = false;
    int nTakeOver = 0;
    int nLength = strlen(number);
    for(int i=nLength-1; i>=0; i--)
    {
        int nSum = number[i] - '0' + nTakeOver;
        if(i == nLength - 1)
        {
            nSum ++;//最低位+1
        }
        
        if(nSum >= 10)
        {
            if(i == 0) isOverflow = true;
            else
            {
                nSum = nSum - 10;
                nTakeOver = 1;
                number[i] = nSum + '0';
            }
        }
        
        else
        {
            number[i] = nSum + '0';
            break;
        }
        
    }
    return isOverflow;
}

void PrintNumber(char *number)
{
    int nLength = strlen(number);
    int start = false;
    for(int i=0; i<nLength; i++)
    {
        if(number[i]!='0' && !start )
        {
            start = true;
        }
        if(start)
        {
            cout<<number[i];
        }

    }
}

void PrintMaxN(int n)
{
    if(n<=0) throw "Wrong Valid";
    char *number = new char[n+1];
    memset(number, '0', n);
    number[n] = '\0';
    
    while(!Increment(number))
    {
        PrintNumber(number);
        cout<<" ";
        
    }
    cout<<end;
}

高效解法

n个从0-9的全排列

由主函数控制第一位(最高位)0-9输出,内部递归,每次固定最后一位则输出,其他从右到左递归排列

发布了68 篇原创文章 · 获赞 2 · 访问量 6203

猜你喜欢

转载自blog.csdn.net/qq_30050175/article/details/90258969