剑指offer:打印从1到最大的n位数(java)

/**
 * 题目:(打印从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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值