剑指offer 打印从1到最大的n位数
题目描述:
输入数字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 ;
}
剑指offer 打印从1到最大的n位数的更多相关文章
- 剑指offer编程题Java实现——面试题12相关题大数的加法、减法、乘法问题的实现
用字符串或者数组表示大数是一种很简单有效的表示方式.在打印1到最大的n为数的问题上采用的是使用数组表示大数的方式.在相关题实现任意两个整数的加法.减法.乘法的实现中,采用字符串对大数进行表示,不过在具 ...
- 《剑指offer》面试题12:打印1到最大的n位数
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
- 剑指Offer:面试题20——顺时针打印矩阵(java实现)
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
- 【剑指offer】顺时针打印矩阵
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...
- 【剑指offer】从上向下打印二叉树
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26089165 剑指offer上的第23题,实际上就是考察二叉树的层序遍历,详细思想能够參考 ...
- 【剑指offer】打印1到最大的n数字
转载请注明出处:http://blog.csdn.net/ns_code/article/details/25562105 剑指offer第12题.九度OJ測试通过. 题目描写叙述: 给定一个数字N, ...
- 剑指offer编程题Java实现——面试题5从头到尾打印链表
题目描述* 剑指offer面试题5:从尾到头打印链表 输入一个链表的头结点,从尾到头打印出每个结点的值 解决方案一:首先遍历链表的节点后打印,典型的"后进先出",可以使用栈来实现这 ...
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
题目:打印1到最大的n位数 输入数字n,按顺序打印输出从1到最大的n位十进制数,比如输入3,打印从1到999. 这道题考察的地方是如何表示大数问题.由于n是任意大的数组,如果n太大的话n位数就超过了l ...
- 剑指offer得意之作——顺时针打印矩阵
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3 ...
随机推荐
- R-CNN常见问题
可以不进行特定样本下的微调吗?可以直接采用AlexNet CNN网络的特征进行SVM训练吗? 不针对特定任务进行微调,而将CNN当成特征提取器,pool5层得到的特征是基础特征,类似于HOG.SIFT ...
- 关于文件属性(Java)
1.编写一个程序,指定一个文件夹,能自动计算出其总容量 import java.io.File; import java.util.ArrayList; public class FileAction ...
- lianjie3
http://7xj7xs.com1.z0.glb.clouddn.com/xiao-chengxu.mp4
- C# 读取Excel中的数据到DataTable中
原文地址:http://www.open-open.com/code/view/1420029490093 public DataTable ExcelToDS(string Path) { stri ...
- 编译rxtx
https://blog.csdn.net/github_29989383/article/details/51886234 https://cloud.tencent.com/developer/a ...
- git && github 相关
权限问题(error: The requested URL returned error: 403 Forbidden while accessing):1. 将自己机器的ssh public key ...
- ide破解
https://blog.csdn.net/yangying496875002/article/details/73603303
- python - socket通信笔记
参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket ...
- redis 锦集
redis 锦集url:http://blog.csdn.net/lqadam/article/category/7479450 1. redis 排序 2.redis 慢查询.位数组和事务 3.re ...
- CSS3 基础
style 标签 <style type="text/css"> h1 { font-size:12px; color:#F00; } </style> 行 ...