输入数字 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;
}
} import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型 最大位数
* @return int整型一维数组
*/
public int[] printNumbers (int n) {
int len = (int)Math.pow(10, n) - 1;
int[] res = new int[len];
for (int i = 1; i <= len; i++) {
res[i - 1] = i;
}
return res;
}
}