剑指offer 打印从1到最大的n位数
2024-10-07 06:23:55
题目描述:
输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数999.
分析:注意不能直接输入最大的n位十进制数,因为可能属于大数,这个数无法用int或者long long存储,因此需要用字符串表示。
思路:我们用n位全排列解法,每一位都可以是0~9的数。利用递归解法。需要注意的是前导0不要输出,比如一位的时候只打印1-9, 2位的时候打印1-9(而不是01、···)、10-99.
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index); void PrintNumber(char* number) {
int index = ;
bool isBeginning0 = true;
int nlength = strlen(number);
//索引到左边第一位不为0的下标。特别注意的是整个字符串全为0的情况
for (int i = ; i < nlength; i++) {
if (number[i] != '') {
index = i;
break;
}
}
if (!(index == && number[index] == '')) {
for (int i = index; i < nlength; i++) {
printf("%c", number[i]);
}
printf("\n");
}
} void Print1ToMaxOfNDigits(int n) {
if (n <= ) {
return;
}
char *number = new char[n + ];
number[n] = '\0';
for (int i = ; i < ; i++) {
number[] = i + '';
Print1ToMaxOfNDigitsRecursively(number, n, );
}
delete [] number;
} void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index) {
if (index == length - ) {
PrintNumber(number);
return;
}
for (int i = ; i < ; i++) {
number[index + ] = i + '';
Print1ToMaxOfNDigitsRecursively(number, length, index + );
}
} int main() {
int number;
while (cin >> number) {
Print1ToMaxOfNDigits(number);
}
return ;
}
最新文章
- Hawk使用补充说明
- 深入理解PHP内核(十)变量及数据类型-类型提示的实现
- mysql管理知识点
- 如何使用mybatis《三》
- 根据.MDF文件查看 SQL数据库的版本信息
- Android自定义遮罩层设计
- Project Euler 86:Cuboid route 长方体路径
- 在vs环境中跑动sift特征提取(代码部分)
- js替换字符串的所有示例代码
- android Uri获取真实路径转换成File的方法
- 数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份
- easygui的导入方式
- sql的left join 、right join 、inner join之间的区别
- 洛谷 P1141 01迷宫
- Repeater中使用条件的两种方法
- ThinkPHP 缓存技术详解 使用大S方法
- SoapUI Pro Project Solution Collection-access the soapui object
- Lecture 5
- 无法将 Ethernet0连接到虚拟网络 VMnet8 以及无法使用桥接的详细解决步骤
- java中的元数据
热门文章
- Python稀疏矩阵运算
- Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路 删边
- csp-s2019 AFO记
- BZOJ 2281 Luogu P2490 [SDOI2011]黑白棋 (博弈论、DP计数)
- Oracle 字符串拼接会出现0自动忽略,解决方案
- 14 补充 MySQL的创建用户和授权
- git本地分支推送到远程分支
- nodejs 文件操作
- 将Microsoft SQL Server 2000数据库转换成MySQL数据库
- 编译mysql时CMake Error at cmake/readline.cmake:85 (MESSAGE)