这是我编写的一个程序,用于打印给定数组的所有可能的子数组,但是逻辑上存在一些问题,并且打印了错误的输出。
有什么算法可以实现这个吗?
public class SubArray {
static int[][] subArrs;
static int count = 0;
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
int N = 8;
subArrs = new int[N][];
subArrs[0] = new int[10];
for (int i = 0; i < arr.length; i++) {
subArrs[i] = new int[1];
subArrs[i][0] = arr[i];
}
count = arr.length;
for (int i = 0; i < arr.length; i++) {
sub(arr, i, i);
}
for (int i = 0; i < subArrs.length; i++) {
System.out.print("[ ");
for (int j = 0; j < subArrs[i].length; j++) {
System.out.print(" " + subArrs[i][j]);
}
System.out.println(" ]");
}
}
这是一种计算具有超过 1 个元素的子数组的方法。
static void sub(int arr[], int i, int index) {
for (int j = i + 1; j < arr.length; j++) {
while (index <= j) {
subArrs[count] = new int[j + 1];
subArrs[count][0] = arr[i];
for (int k = 1; k < (j + 1); k++) {
subArrs[count][k] = arr[k];
}
count++;
index++;
}
}
}
}
我得到的输出
[ 1 ]
[ 2 ]
[ 3 ]
[ 1 2 ]
[ 1 2 ]
[ 1 2 3 ]
[ 2 2 3 ]
[ 2 2 3 ]
期望的输出
[ 1 ]
[ 2 ]
[ 3 ]
[ 1 2 ]
[ 1 3 ]
[ 2 3 ]
[ 1 2 3 ]
最佳答案
试试这个代码:
for (int i = 0; i < yourArray.length; i++)
{
// j is the number of elements which should be printed
for (int j = i; j < yourArray.length; j++)
{
// print the array from i to j
for (int k = i; k <= j; k++)
{
System.out.print(yourArray[k]);
}
System.out.println();
}
}
关于java - java中如何查找数组的子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44534906/