美文网首页
AC 剑指 Offer 17. 打印从1到最大的n位数

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

作者: itbird01 | 来源:发表于2022-03-26 08:19 被阅读0次

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

    示例 1:
    输入: n = 1
    输出: [1,2,3,4,5,6,7,8,9]

    说明:
    用返回一个整数列表来代替打印
    n 为正整数

    class Solution {
        /**
         * @Title: printNumbers
         * @Description: DFS
         * @author: itbird
         * @date 2022年3月21日 下午7:21:25
         * @param n
         * @return int[] 时间复杂度: O(N) 空间复杂度: O(Math.pow(10, n))
         */
        int[] res;
        int currentIndex = 0;
    
        public int[] printNumbers(int n) {
            // 数组总共的大小
            int k = (int) (Math.pow(10, n) - 1);
            // 初始化数组
            res = new int[k];
            // 遍历找到所有的全排列
            // 去除首位是0的,过程中控制首位元素
    
            // 外层循环,代表当前遍历的是几位数
            for (int i = 1; i <= n; i++) {
                for (char first = '1'; first <= '9'; first++) {
                    char[] num = new char[i];
                    num[0] = first;
                    dfs(1, num, i);
                }
            }
            return res;
        }
    
        private void dfs(int index, char[] num, int digit) {
            if (index == digit) {
                // 终止条件
                res[currentIndex++] = Integer.parseInt(String.valueOf(num));
                return;
            }
    
            for (char i = '0'; i <= '9'; i++) {
                num[index] = i;
                dfs(index + 1, num, digit);
            }
        }
    
        /**
         * @Title: printNumbers
         * @Description: 累加
         * @author: itbird
         * @date 2022年3月21日 下午7:14:32
         * @param n
         * @return int[] 时间复杂度: O(1) 空间复杂度: O(Math.pow(10, n))
         */
        public int[] printNumbers1(int n) {
            int k = (int) (Math.pow(10, n) - 1);
            int[] result = new int[k];
            for (int i = 0; i < result.length; i++) {
                result[i] = i + 1;
            }
            return result;
        }
    }
    

    相关文章

      网友评论

          本文标题:AC 剑指 Offer 17. 打印从1到最大的n位数

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