首页 > 试题广场 >

打印从1到最大的n位数

[编程题]打印从1到最大的n位数
  • 热度指数:43044 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
1. 用返回一个整数列表来代替打印
2. n 为正整数,0 < n <= 5
示例1

输入

1

输出

[1,2,3,4,5,6,7,8,9]

不考虑大数:

class Solution {
    public int[] printNumbers(int n) {
        int max = (int)Math.pow(10,n);
        int[] ret = new int[max-1];
        for (int i=0;i<max-1;i++){
            ret[i]=i+1;
        }
        return ret;
    }
}

考虑大数,用String输出:

class Solution {
    StringBuilder s = new StringBuilder();
    char[] num;

    public String bigDigit(int n){
        //digit:当前生成digit位的数字;
        for (int digit = 1;digit<=n;digit++) {
            //第一位只生成1-9的数字,提出来;
            for (char first = '1'; first <= '9'; first++) {
                num = new char[digit];
                num[0]=first;
                dfs(1,digit);
            }
        }
        return s.append(s.length()).toString(); //最后看看字符串有多长?
    }
    void dfs(int index,int digit){
        if(index==digit){
            if(num[index-1]=='9') s.append(num).append("\n");
            else s.append(num).append(',');
            return;
        }
        for (char c = '0';c<='9';c++){
            num[index]=c;
            dfs(index+1,digit);
        }
    }
}
发表于 2021-11-15 00:37:31 回复(2)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 最大位数
     * @return int整型vector
     */
    vector<int> printNumbers(int n) {
        // 时间复杂度O(10^n),空间复杂度O(1)
        int num = 9;
        while (--n) num = num * 10 + 9;
        vector<int> res(num, 0);
        for (int i = 0; i < num; ++i) res[i] = i + 1;
        return res;
    }
};

发表于 2022-08-14 17:08:55 回复(0)
上界就是n个9
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 最大位数
     * @return int整型一维数组
     */
    public int[] printNumbers (int n) {
        // write code here
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < n; i++) sb.append(9);
        int ub = Integer.parseInt(sb.toString());      // 上界
        int[] res = new int[ub];
        for(int i = 1; i <= ub; i++) res[i - 1] = i;
        return res;
    }
}

发表于 2021-11-20 21:59:32 回复(1)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
static int arr[100000];
int* printNumbers(int n, int* returnSize ) {// write code here
    int m = 9;
    scanf("%d", &n);
    if(n > 0 && n <= 5)
    {
        for(int i = 1; i < n; i++)
        {
            m = 10 * m + 9;
        }
        for(int j = 1; j <= m; j++)
        {
            arr[j - 1] = j;
            *returnSize = j;
        }
        return arr;
    }
    else
    {
        return 0;
    }
}

发表于 2022-07-09 22:45:52 回复(0)
static int arr[100001];
int* printNumbers(int n, int* returnSize ) {
    int max = 1;
    for(int i = 0;i < n;i++)
    {
        max *= 10;
    }
    int i = 0;
    for(i = 1;i < max;i++)
    {
        arr[i-1] = i;
    }
    *returnSize = i-1;
    return arr;
}
returnSize是你返回的数组长度,需要你自己设定,编译器并不知道,不是你返回的数组
发表于 2022-01-22 10:48:08 回复(2)
class Solution:
    def printNumbers(self , n: int) -> List[int]:
        return [i for i in range(1,10**n)]

发表于 2021-12-23 22:12:32 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
static int s[100000];
int* printNumbers(int n, int* returnSize ) {
    // write code
    int k=9;
    for(int i=1;i<n;i++)
        k=k*10+9;
    int j;
    for(j=0;j<k;j++)
        s[j]=j+1;
    *returnSize=j;
    return s;
}

发表于 2022-05-06 15:17:45 回复(0)
int* printNumbers(int n, int* returnSize ) {
    // write code here
    *returnSize = pow(10, n) - 1;
    int* nums = (int*)malloc(*returnSize * sizeof(int));
    for(int i = 0; i<*returnSize; i++)
    {
        nums[i] = i + 1;
    }
    return nums;
}

发表于 2022-04-26 16:17:32 回复(0)

pyton

class Solution:
    def printNumbers(self , n ):
        # write code here
        return list(range(1,10**n))


发表于 2021-11-07 22:31:11 回复(1)
#include<stdlib.h>
int* printNumbers(int n, int* returnSize ) {
    int i = n;
    *returnSize = pow(10,n)-1;
    int *arr = (int *)malloc(sizeof(int)*(*returnSize));
    for(int i = 0;i<*returnSize;i++)
    {
        arr[i]=i+1;
    }
    return arr;
}
编辑于 2024-02-08 15:02:50 回复(1)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* printNumbers(int n, int* returnSize ) 
{
    int i=0;
    int N=9;
    for(i=1;i<n;i++)
    {
        N=N*10+9;
    }
    static int a[1000000]={0};//static 使数组成为静态局部变量
    for(i=0;i<N;i++)
    {
        a[i]=i+1;
    }
    *returnSize=i;//returnSize返回数组元素个数
    return a;
}


发表于 2022-12-27 17:08:04 回复(0)
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 最大位数
     * @return int整型一维数组
     */
    public static int[] printNumbers (int n) {
        // write code here
        int top = (int)Math.pow(10,n) - 1;//要输出的最大值
        int[] ans = new int[top];//创建top大小的数组
        for (int i = 0 ; i < top ; i++) {//数组从0开始 写入数组的值 比数组的index大1
            ans[i] = i+1;
        }
        return ans;
    }
}

发表于 2022-08-26 02:14:47 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 最大位数
     * @return int整型一维数组
     */
    public int[] printNumbers (int n) {
        // write code here
        ArrayList<Integer> list = new ArrayList<>();
        int count = 1;
        while ((String.valueOf(count).length() <= n)){
            list.add(count);
            count++;
        }
        int[] res = new int[list.size()];
        for (int i = 0; i < list.size(); i++){
            res[i] = list.get(i);
        }
        return res;
    }
}

发表于 2021-12-16 15:12:12 回复(0)
import java.util.*;


public class Solution {
    public int[] printNumbers (int n) {
        int number = 0;
        for (int i = 0; i < n; i++) {
            number = number * 10 + 9;
        }
        int[] res = new int[number];
        for (int i = res.length - 1; i >= 0; i--) {
            res[i] = number--;
        }
        return res;
    }
}

编辑于 2024-01-26 15:10:53 回复(0)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 最大位数
     * @return int整型vector
     */
    vector<int> printNumbers(int n) {
        // write code here
        int tmp=1;
        vector<int> vec;
        for(int i=0; i<n; i++){
            tmp *= 10;
        }
        for(int i=1; i<tmp; i++){
            vec.push_back(i);
        }
        return vec;
    }
};

发表于 2023-08-28 23:11:20 回复(0)
import java.util.ArrayList;
import java.util.Scanner;
import java.math.*;
public class Solution {
    public int[] printNumbers (int n) {
     
        int p=(int)(Math.pow(10,n));
        int []arr=new int[p-1];
        for(int i=0;i<p-1;i++){
            arr[i]=i+1;
        }
        
        return arr;
      
    }
}

发表于 2023-08-24 20:32:39 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
#include <stdio.h>
    //static int arr[100001];

int* printNumbers(int n, int* returnSize) {
	
	int arr[100000];//此处最好使用static修饰数组使其变为一个静态数组使其作用域扩大至整个文件范围

	int j = 0;
	int i = 1;

	if (n > 0 && n <= 5)
	{
		if (n == 1)
		{
			for (i = 1; i <= 9; i++)
			{
				arr[j++] = i;
			}
		}

		if (n == 2)
		{
			for (i = 1; i <= 99; i++)
			{
				arr[j++] = i;
			}
		}

		if (n == 3)
		{
			for (i = 1; i <= 999; i++)
			{
				arr[j++] = i;
			}
		}

		if (n == 4)
		{
			for (i = 1; i <= 9999; i++)
			{
				arr[j++] = i;
			}
		}

		if (n == 5)
		{
			for (i = 1; i <= 99999; i++)
			{
				arr[j++] = i;
			}
		}

	}
	*returnSize = i - 1;//返回数组的大小给该指针所指向的变量
	return arr;//返回数组首元素地址
}

发表于 2023-08-16 16:32:14 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* printNumbers(int n, int* returnSize) {
    // write code here
    int i = 0;
    static int arr[100000] = { 0 };//static 使数组成为静态局部变量
    for (i = 0; i < pow(10, n) - 1; i++)
    {
        arr[i] = i + 1;
    }
    *returnSize = pow(10, n) - 1;
    return arr;
}

发表于 2023-08-11 14:44:15 回复(0)
    int*a=NULL;        //*********运用realloc动态开辟内存**********
    int num = 1;
    int size = 0;
    int cap = 0;

    //得到一个临界数
    for (int i = 0; i < n; i++) {
        num *= 10;
    }
    num--;

    //打印逻辑
    int step=1;
    while (size < num) {
        if (size == cap) {
            a = (int*)realloc(a, sizeof(int) * (cap==0?3:cap+3));

            cap += 3;
        }
        a[size++] = step++;
    }

    *returnSize=size;
    return a;

发表于 2023-08-10 17:42:11 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 最大位数
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* printNumbers(int n, int* returnSize ) 
{
    static int arr[100000-1];
    int i =1;
    for (; i / (int)pow(10, n)!= 1; i++)
    {
        arr[i-1]=i;
    }
    *returnSize = i-1;
    return arr;
}

发表于 2023-08-07 17:46:26 回复(0)

问题信息

难度:
91条回答 2763浏览

热门推荐

通过挑战的用户

查看代码