剑指offer17打印从1到最大的n位数

Posted shiganquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer17打印从1到最大的n位数相关的知识,希望对你有一定的参考价值。

题目

输入数字n,按顺序打印从1到最大n位的十进制数。比如输入3,打印1到999。

思路

输入的数字可以很大,可以是33,65,这样的话int和long long都不能满足题目要求,所以这是一个大数问题。

大数问题经常用字符串来解决

我们当然可以用字符串来模拟加法

最方法的方法应该是做一个n位的全排列,每位可以取0~9

void Print1toMaxOfNDigits(int n){
  if (n <= 0)
    return;
  
  char* number = new char[n+1];
  number[n]=;

  for (int i = 0; i < 10; i++)
  {
    number[0] = i + 0;
    Print1ToMaxOfNDigitsRecursively(number,n,0);
  }
  delete[] number;
}

void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index){
  if (index == length - 1)
  {
    PrintNumber(number);
    return;
  }
  
  for (int i = 0; i < 10; i++)
  {
    number[index+1] = i + 0;
    Print1ToMaxOfNDigitsRecursively(number, length, index + 1);
  }
}

void PrintNumber(char* Number){
  bool isBegin = true;
  int nLength = strlen(number);
  
  for (int i = 0; i < nLength; i++)
  {
    if (isBegin && number[i] != 0)
      isBegin = false;
    if (!isBegin)
      printf("%c", number[i]);
  }
  printf("	");
}

 

以上是关于剑指offer17打印从1到最大的n位数的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode剑指 Offer 17. 打印从1到最大的n位数(C++)

剑指 Offer 17. 打印从1到最大的n位数

剑指 Offer 17. 打印从1到最大的n位数

剑指 Offer 17. 打印从1到最大的n位数

[LeetCode]剑指 Offer 17. 打印从1到最大的n位数

剑指 Offer 17. 打印从1到最大的n位数 的详细题解