/*******************************************************************
*《剑指Offer——名企面试官精讲典型编程题》C++代码
*
* htfeng
* 2018.09.28
*
* 面试题17: 打印从1到最大的n位数
* 题目:输入数字n,an顺序打印从1到最大的n位十进制数,比如输入3,
* 则打印出1、2、3一直到最大的三位数999。
*
* 分析:有一个陷阱,当n很大的时候,用int或者long long都会溢出,怎么办?
* 使用字符串存储数字
*******************************************************************/#include<iostream>using namespace std;bool Increment(char* number);
void PrintNumber(char* number);
void Print1ToMaxOfNdigitsRecursively(char* number, int length, int index);// 方法一
void PrintToMaxOfDigits(int n) {if (n <= 0)return;char *number = new char[n + 1];memset(number, '0', n);number[n] = '\0';while (!Increment(number))PrintNumber(number);delete[] number;
}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++;if (nSum >= 10) {if (i == 0)isOverflow = true;else {nSum -= 10;nTakeOver = 1;number[i] = '0' + nSum;}}else {number[i] = '0' + nSum;break;}}return isOverflow;
}void PrintNumber(char* number) {bool isBeginning0 = true;int nLength = strlen(number);for(int i = 0; i < nLength; i++) {if (isBeginning0 && number[i] != '0')isBeginning0 = false;if (!isBeginning0)printf("%c", number[i]);     }cout << "\t";
}// 方法二
void Print1ToMaxOfNdigits_2(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);}
}int main() {int n = 3;PrintToMaxOfDigits(n);Print1ToMaxOfNdigits_2(n);system("pause");return 0;
}

转载于:https://www.cnblogs.com/htfeng/p/9931714.html

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

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

    题目:打印从1到最大的n位数 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 1: 输入: n = 1 输出: ...

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

    2020-03-21 1.题目描述 打印从1到最大的n位数 2.题解 求出满足条件的最大值即可 3.代码 #include <iostream> #include <vector&g ...

  3. 剑指Offer - 面试题17. 打印从1到最大的n位数

    1. 题目 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 1: 输入: n = 1 输出: [1,2,3,4, ...

  4. leetcode —— 面试题17. 打印从1到最大的n位数

    输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. -------------- 解题思路:使用深度优先遍历,从第一位开始 ...

  5. 剑指offer 面试题17. 打印从1到最大的n位数

    输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 示例 1: 输入: n = 1 输出: [1,2,3,4,5,6,7, ...

  6. 剑指offer面试题17. 打印从1到最大的n位数

    题目描述 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数 999. 思路 详见链接 代码 class Solution:def ...

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

    [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 文章目录 [LeetCode]剑指 Offer 17. 打印从1到最大的n位数 一.大数 一.大数 将 1~9 加入队列 对队列中 ...

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

    目录标题 算法汇总 题目 关键点 代码 1.解体方法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码地址链接:力 ...

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

    文章目录 解法1:回溯 https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/ 难度:简单   输入数字 ...

最新文章

  1. 用 GRUB 引导自己的操作系统
  2. EditText 不弹出软件键盘
  3. html5 jq图片效果,HTML5 jQuery可左右滑动拖拉的照片处理前后对比界面
  4. JS快速实现深拷贝--一行就搞定了
  5. nodejs - local installation and global installation
  6. 计算机意外重启或遇错误无法继续,计算机意外地重新启动或遇到错误如何解决?...
  7. C++中的各种可调用对象
  8. Spring MVC No converter found for return value of type
  9. 在填写表单中输入全角数字的解决方案
  10. 烂泥:使KVM显示VM的IP地址及主机名
  11. B2C网站运营核心数据分析模型
  12. asp.net中的窗体身份验证(完整篇之六:登出后不能通过后退回来面来的页面)...
  13. 【SPOJ:FAVDICE】Favourite Dice(概率dp)
  14. 国科大学习资料--矩阵分析与应用(李保滨)--2015年期末考试试卷
  15. java联机对战五子棋游戏(SWT版)
  16. matlab读取多张fig图然后合并为一张图(子图的形式)
  17. 2018 第九届 蓝桥杯 JavaB组 摔手机(动态规划解决)
  18. 如何判断自己外网IP是否为真实公网IP,以及解决方案
  19. 向 Excel 和 PowerPoint 添加可编辑地图的指南
  20. php外文参考文献翻译,双语参考文献输出功能

热门文章

  1. 蓝桥杯2014c++真题:切面条
  2. spss与python和sql区别_Python/Excel/SPSS/SQL数据处理方法比较之2 - 数据查看
  3. java io图_JAVA IO流结构图
  4. html5画直线,小白学canvas-从0到1,画直线
  5. JavaScript Math.random()随机数函数
  6. sequelize 增加数据库字段_sequelize 5.0中文文档连接数据源及数据类型 (一) - node.js语言最好用的orm...
  7. druid 连接池监控报错 Sorry, you are not permitted to view this page.
  8. layui 鼠标移入变为小手_如何在 LayUI 数据表格的列元素上,鼠标悬浮,显示所有文字内容(修改源码)...
  9. 数学一年级应用题_【专项练习】一年级下册数学100以内加减法应用题专项练习,附答案...
  10. 【luogu1337】【JSOI2004】平衡点 / 吊打XXX(模拟退火)