给定
n
作为n>=0
的输入,创建一个模式为{1,1,2,1,2,3,… 1,2,3..n}
的数组。
我的方法
我创建了一个存在的模式,并将该模式存储在数组中。我在这里很困惑如何指定数组的大小。但当我设法删除某些额外的0时,我得到空输出
public int[] create(int num) {
int k=0;
int x[]=new int[10]; //I was confused here how much size?
for(int i=1;i<=num;i++) {
for(int j=1;j<i+1;j++) {
x[k++]=j;
}
}
return x;
}
要删除零,我编写了以下代码。
int g=0;
for(int i=0;x[i]!=0;i++) {
count++;
}
x=new int[count];
for(int p=1;p<=num;p++) {
for(int q=1;q<p+1;q++) {
x[g++]=q;
}
}
我的问题:我没有得到预期的输出。我应该为此创建一个新数组吗?
Parameters Actual Output Expected Output
'3' {1,1,2,1,2,3,0,0,0,0} {1,1,2,1,2,3}
答案 0 :(得分:1)
让我们尝试计算结果数组的大小:
{1,1,2,1,2,3,...,1,2,3,..,n}
所以n
元素的末尾(1,2,3,..,n
)前面有n-1
个元素(1,2,3,..,n-1
)等,直到有一个元素为止。因此,元素总数为n + (n-1) + (n-2) + ... + 1
,which is n*(n+1)/2
。
现在让我们尝试一种简单的算法来生成想要的数组。我们可以看到,数组由n
个子数组组成,其中第一个是{1}
,第二个是{1,2}
,...,最后一个是{1,2,...,n}
:< / p>
n
排除的每个值(这将对应于n
子阵列)n
的值数组。示例代码:
public static void main(String[] args) {
int n = 3;
int[] result = new int[n*(n+1)/2];
int index = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
result[index++] = j + 1;
}
}
System.out.println(Arrays.toString(result));
}