输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。
1. 用返回一个整数列表来代替打印
2. n 为正整数,0 < n <= 5
2. n 为正整数,0 < n <= 5
不考虑大数:
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); } } }
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; } };
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; } }
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @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; } }
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @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; }
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @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; }
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; } }
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; } }
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; } };
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @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;//返回数组首元素地址 }
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @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; }
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;
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @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; }