首页 > 其他 > 详细

【剑指offer】17、打印从1到最大的n位数

时间:2018-07-20 00:01:20      阅读:196      评论:0      收藏:0      [点我收藏+]

题目

输入数字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]=\0;

  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("\t");
}

 

【剑指offer】17、打印从1到最大的n位数

原文:https://www.cnblogs.com/shiganquan/p/9339080.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!