美文网首页
《剑指offer第二版》面试题17:打印从1到最大的n位数(ja

《剑指offer第二版》面试题17:打印从1到最大的n位数(ja

作者: castlet | 来源:发表于2020-03-23 22:25 被阅读0次

    题目描述

    输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印1,2,3直到999。

    解题思路:

    1. 题目并没有限定n的大小,因此需要考虑大数问题。
    2. 可以通过字符串模拟数字的加法。
    3. 打印字符串。

    代码

    void printToMaxNDigits(int n){
        if (n <= 0) {
            return;
        }
        char[] numbers = new char[n];
        for (int i = 0; i < numbers.length; i++) {
            // 每一位都设置为'0'
            numbers[i] = '0';
        }
        while (increase(numbers)) {
            // 增加字符串大小,并打印
            printNumber(numbers);
            System.out.print(" ");
        }
    }
    
    /**
     * 用字符串模拟数字的加法
     * @param number 字符串
     * @return 是否到达字符串的最大值
     */
    boolean increase(char[] number){
        if (number == null || number.length <= 0) {
            return false;
        }
        int carry = 1;
        int i = number.length - 1;
        while ( carry > 0 && i >= 0) {
            int firstNumber = number[i] - '0';
            int result = firstNumber + carry;
            if (result >= 10) {
                number[i] = Character.forDigit(result % 10, 10);
                carry = 1;
            } else {
                number[i] = Character.forDigit(result, 10);
                carry = 0;
            }
            i--;
        }
        if (i < 0 && carry > 0) {
            return false;
        }
        return true;
    }
    
    /**
     * 打印字符串
     * @param number
     */
    void printNumber(char[] number){
        if (number == null || number.length <= 0) {
            return;
        }
        int length = number.length;
        boolean flag = false;
        for (int i = 0; i < number.length; i++) {
            if (i == number.length - 1) {
                System.out.print(number[i]);
                break;
            }
            if (!flag) {
                flag = !(number[i] == '0');
            }
            if (flag) {
                System.out.print(number[i]);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:《剑指offer第二版》面试题17:打印从1到最大的n位数(ja

          本文链接:https://www.haomeiwen.com/subject/mmngyhtx.html