首页 > 其他 > 详细

剑指 Offer 17. 打印从1到最大的n位数

时间:2021-09-15 20:45:20      阅读:24      评论:0      收藏:0      [点我收藏+]

题目:输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
思路:字符串解决大数问题

代码:
package offer.q17;

import java.util.Arrays;

//考虑大数问题
public class A2 {

static boolean invalidInput = false;

public static void printNumbers(int n) {
    if (n <= 0) {
        invalidInput = true;
        return ;
    }
    char[] resChs = new char[n ];
    Arrays.fill(resChs,‘0‘);
    String res = String.valueOf(resChs);
    System.out.println(res);

    char[] tarChs = new char[n];
    Arrays.fill(tarChs,‘9‘);
    String target = String.valueOf(tarChs);
    int i=n-1,j= n-1; //i记录数字的最高位

    //字符串做加法
    while(res.compareTo(target)!=0) {
        boolean carryBit = false;   //  是否产生进位
        while (res.charAt(j) == ‘9‘) {
            j--;
            carryBit =true;
        }
        char temp = (char) (res.charAt(j) + 1);
        if(!carryBit){
            if(j==n-1){
                res = res.substring(0,j)+temp;
            } else if(j==0){
                res = temp+res.substring(j+1,n);
            } else {
                res = res.substring(0,j)+temp+res.substring(j+1,n);
            }
        } else{
            char[] tempChs = new char[n-j-1];   //j后面的全部‘9‘变为全部‘0‘
            Arrays.fill(tempChs,‘0‘);
            String tempStr = String.valueOf(tempChs);
            res = res.substring(0,j)+temp+tempStr;
            if(j<i){
                i=j;
            }
            j = n-1;
        }
        System.out.println(res.substring(i,n));
    }
}

public static void main(String[] args) {
    printNumbers(3);
}

}

剑指 Offer 17. 打印从1到最大的n位数

原文:https://www.cnblogs.com/nickyBlog/p/15269254.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!