/** * 题目:(打印从1 到最大n位数) * 输入数字n,按顺序打印出从1到最大n位十进制数。比如输入3 * 则打印出1,2,3一直到最大的3位数999. * 解题思路: * 首先创建n位存储空间,存储要打印的数字(考虑不知道n具体是几位, * 可能是大数据,把数字转换为字符串),然后每一位数字从0到9全排列 */ public class P114_PrintMaxNDigits { public void PrintMaxNDigits(int n){ //存储要打印的数字 StringBuffer str = new StringBuffer(n); //将str初始化为0 for(int i=0;i<n;i++) { str.append(0); } for(int i=0;i<=9;i++) { //将索引为0的数值分别设置为0-9 str.setCharAt(0,(char)(i+'0')); //打印数字 PrintDigitsExeptLast(str,n,0); } } public void PrintDigitsExeptLast(StringBuffer str, int n, int index) { //当索引为最后一位时,打印输出 if (index == n - 1) { PrintNumber(str); return; } for (int i = 0; i<=9;i++) { //索引为index+1的值设置为0-9 str.setCharAt(index + 1, (char) (i + '0')); //每设置一次以后,判断是否有下一位,若有,则递归继续设置,若没有,则输出。 PrintDigitsExeptLast(str, n, index + 1); } } public void PrintNumber(StringBuffer str) { boolean IsBegining0 = true; for(int i=0;i<str.length();i++) { if (IsBegining0 && str.charAt(i) != '0') { IsBegining0 = false; } if (!IsBegining0) { System.out.print(str.charAt(i)); } } System.out.println(); } public static void main(String[] args) { int n=2; P114_PrintMaxNDigits test = new P114_PrintMaxNDigits(); test.PrintMaxNDigits(n); } }
剑指offer:打印从1到最大的n位数(java)
最新推荐文章于 2021-02-16 07:10:18 发布