打印1到最大的n位数:大数问题,全排列实现
来源:互联网 发布:怎么关掉电脑445端口 编辑:程序博客网 时间:2024/06/09 07:25
题目:
输入数字n,按顺序打印出从1到最大的n位十进制数。比如,输入3,则打印出1,2,3,…..,一直到最大的3位数即999。
剑指offer上的题目,典型的大数加法问题,无论是int还是long 类型都可能会溢出。所以在解决大数问题时,通常是使用字符串或者数组实现其功能。
思考:
- 字符串String在这里需要不断做改变,大家都知道String是不可变的,所以每次都需要新建String对象。因此,采用数组方式,字符 int均可;
- 剑指offer上代码对全排列表述重复,再次做小修改。
//最重要递归函数实现全排列public static void Print_1ToMax_Of_Ndigits(int[] number, int length,int index){ //检查当前是否 溢出,溢出代表排列已满,即最后一位已经赋值,直接将当前数字number打印即可; if(index ==length){ PrintNumber(number); return; } for(int i=0;i<10;i++){ number[index]=i; PrintMaxOfNdigits(number, length, index+1); } System.out.println("");//最高位变一次,输出一次空行 } //打印字符数组number public static void PrintNumber(int[] number){ boolean isBeginning0=true; for(int i=0;i<number.length;i++){ if(isBeginning0&&number[i]!=0) isBeginning0=false; if(!isBeginning0){//从第一个非0数字打印 System.out.print(number[i]); } } System.out.print("\t");//一个数字输出完毕 } public static void PrintNumber(int n){ if(n<=0) return; int[] number = new int[n]; Print_1ToMax_Of_Ndigits(number, n, 0); }
全排列,算法中实现时就是在循环中指定第一个数字后,再去for指定第二个,第三个;在这期间需要去判断,指定的位数是否已满,已满则直接将这个拼好的 int[] 输出即可。
阅读全文
0 0
- 打印1到最大的n位数:大数问题,全排列实现
- 打印1到最大的n位数(大数问题)
- 大数问题-打印1到最大的n位数
- 面试题12:打印1到最大的n位数-大数问题-递归实现多层循环
- 打印从1到最大的n位数(考虑大数问题)
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 面试题12: 打印1到最大的n位数(递归解法,全排列的递归解法)
- 打印1到最大的n位数(Java实现)
- 【编程题目】Pq.7--打印1到最大的n位数(关于大数问题的探讨)
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- EM算法(Expectation Maximization Algorithm)详解
- Mysql 建表时,日期时间类型选择
- git基础操作
- 如何解决dxBarManager上面编辑框录入内容不能立刻生效的问题(光标移开,而不是tab,会导致内容revert)
- 实战mp4文件解析——对着文件分析,可以一看
- 打印1到最大的n位数:大数问题,全排列实现
- Kerberos:cannot get master principle
- 几种自定义dialog(包括个别新的思路)
- npm安装stylus和stylus-loader
- npm link
- (大数据)MapReduce开发,一个没有隐私的世界!
- 阿里巴巴Java开发手册
- LeetCode
- sql server 查询数据库表结构