Skip to content
本页目录

17-打印从1到最大的n位数

题目描述

https://leetcode.cn/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof

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

示例 1:

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

说明:

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

思路分析

n表示位数,题目返回的是 int 数组,我们假设它不会越界 那么最大的值就是 n 个 9 组成的数值,我们一次将它加入数组返回

实现代码

csharp
public class Solution {
    public int[] PrintNumbers(int n) {
    	if(n<1){
    		return new int[]{};
    	}
    	string s = "";
    	for(int i=0; i<n; i++){
    		s+="9";
    	}
    	int end = Convert.ToInt32(s);
    	List<int> arr = new List<int>();
    	for(int i=1; i<=end; i++){
    		arr.Add(i);
    	}
    	return arr.ToArray();
    }
}

思路分析:大数问题

LeetCode 因为返回值的问题,没有考虑大数,本题的原本目的是为了考虑大数问题,即字符串最终的数值可能超过 int/long 等类型的最大值

java
class Solution {
    StringBuilder res;
    int nine = 0, count = 0, start, n;
    char[] num, loop = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
    public String printNumbers(int n) {
        this.n = n;
        res = new StringBuilder();
        num = new char[n];
        start = n - 1;
        dfs(0);
        res.deleteCharAt(res.length() - 1);
        return res.toString();
    }
    void dfs(int x) {
        if(x == n) {
            String s = String.valueOf(num).substring(start);
            if(!s.equals("0")) res.append(s + ",");
            if(n - start == nine) start--;
            return;
        }
        for(char i : loop) {
            if(i == '9') nine++;
            num[x] = i;
            dfs(x + 1);
        }
        nine--;
    }
}

复习:20220611

csharp
public class Solution {

    private List<int> list;

    private void dfs(int n, StringBuilder sb){
        if(n == 0){
            //输出;
            int num = Convert.ToInt32(sb.ToString());
            if(num > 0){
                list.Add(num);
            }
            return;
        }
        for(int i=0; i<=9; i++){
            sb.Append(i.ToString());
            dfs(n-1,sb);
            sb.Length--;
        }
    }

    public int[] PrintNumbers(int n) {
        list = new List<int>();
        StringBuilder sb = new StringBuilder();
        dfs(n,sb);
        return list.ToArray();
    }
}

Released under the MIT License.