面试题 12
来源:互联网 发布:ubuntu的cp命令 编辑:程序博客网 时间:2024/05/29 14:15
1 题目描述
题目:输入数字 n, 按顺序打印从 1 到 最大位 n 位十进制数。
比如输入 3 打印 1,2,3 一直打印到 999
2 解法描述
1 乍看之下的解法
public static void print12Max(int n){ int result=1; int i; if(n<=0) return; for(i=0;i<n;i++){ result*=10; } for(i=1;i<result;i++){ System.out.println(i); }}
存在问题;当 n 值很大时会导致越界出现错误情况,没有考虑大数情况
2 在字符数组上模拟数字加法,解决大数溢出问题
public static void print12Max_1(int n){ //用长度为 n 的字符数组表示数字 char[] number=new char[n]; int i; if(n<=0) return; for(i=0;i<n;i++){ number[i]='0'; } while(increment(number)){ printResult(number); }}private static boolean increment(char[] number){ boolean overflow=true; int takeover=0; int i; int len=number.length-1; for(i=len;i>=0;i--){ int sum=number[i]-'0'+takeover; if(i==len){ sum++; } if(sum>=10){ if(i==0){ overflow=false; break; }else{ number[i]='0'; takeover=1; } }else{ number[i]=(char) (sum+'0'); break; } } return overflow;}private static void printResult(char[] number){ boolean flag=true; for(int i=0;i<number.length;i++){ if(number[i]=='0'&&flag){ }else{ flag=false; System.out.print(number[i]); } } System.out.println();}
上述代码使用字符数组模拟整数的加法,代码有点长,接下来换一种思路来考虑这个问题,n 位所有的十进制数其实就是 n 个从 0 到 9 的全排列,也就谁说,我们把数字的每一位从 0 到 9 排列一遍,就得到了所有的十进制数,只是打印的时候,数字排在前面的 0 不打印出来。
比如 n=10 时
依次打印
0000000001
……
0000000009
0000000010
……
9999999999
public static void print12Max_2(int n){ if(n<=0) return; char[] number=new char[n]; for(int i=0;i<n;i++){ number[i]='0'; } for(int i=0;i<10;i++){ number[0]=(char) (i+'0'); showRecursive(number,0); }}private static void showRecursive(char[] number,int index){ if(index==number.length-1){ printResult(number); return; } for(int i=0;i<10;i++){ number[1+index]=(char) (i+'0'); showRecursive(number,index+1); }}
0 0
- .net面试题12
- 面试题 12
- 面试题12
- java面试题系列12
- 剑指offer面试题12
- 【面试题】剑指offer 12
- 面试题....
- 面试题
- 面试题
- 面试题
- 面试题
- 面试题
- 面试题
- 面试题
- 面试题
- 面试题
- 面试题
- 面试题
- Android Api Demos登顶之路(五十九)Content-->Assets
- docker 镜像
- Java中面向对象思想分析
- 新公司法下股权变更登记审查应当注意的问题
- HSSFWorkBooK用法 excel 操作
- 面试题 12
- Linux下的中断与异常
- textView设置placeholder
- 值得学习的开源项目
- C++文件读写
- IOS8下UIView下的TableView从UINavigationController中POP出来后crash
- 超级好用的Android日志工具类
- mvn 常用的命令
- iOS中3种正则表达式的使用与比较