如何从给定的整数数组中查找子集

时间:2018-07-17 06:43:38

标签: java data-structures set powerset

我找到了解决此问题的许多解决方案,但我没有得到任何解决方案。谁能给我最简单的解决方案,如果可能的话,请用Java语言给出答案。

  Example-   
  Input : arr[] = {1, 2, 3}
  Possible Subset are:{}, {1}, {2}, {3}, {1, 2}, {1, 3}, 
                 {2, 3}, {1, 2, 3}

该程序未找到所有子集

class Test
{
static int arr[] = new int[]{1, 2, 3, 4};

// Prints all subarrays in arr[0..n-1]
static void subArray( int n)
{
    // Pick starting point
    for (int i=0; i <n; i++)
    {
        // Pick ending point
        for (int j=i; j<n; j++)
        {
            // Print subarray between current starting
            // and ending points
            for (int k=i; k<=j; k++)
                System.out.print(arr[k]+"");
        }
    }
}

// Driver method to test the above function
public static void main(String[] args) 
{
    System.out.println("All Non-empty Subarrays");
    subArray(arr.length);

}

}

Output-
1 
1 2 
1 2 3 
1 2 3 4 
2 
2 3 
2 3 4 
3 
3 4 
4
This is not finding all subsets like (1,3)...

2 个答案:

答案 0 :(得分:1)

如果您没有得到其他人的代码或算法,我想尝试用简单的文字来表达。希望您知道二进制到十进制的转换是如何发生的。

Binary to Decimal conversion

来源:www.wikihow.com

  1. 以同样的方式,只取一个大小等于给定数组大小的位数组
  2. 使用0和1生成所有可能的组合
  3. 使用每种组合,您都可以生成一个集合。怎么样?为此,如果组合的值为1,则将给定数组的相同索引处的相应元素包括到集合中,否则为0,则从集合中排除该元素
  4. 这也会生成重复的集合,但是如果您比较所有集合,则可以避免这些重复的集合。

    希望这会有所帮助。

答案 1 :(得分:0)

听起来像是您自己很难理解实际问题。我认为您可以“看到”最终的解决方案(可能的解决方案列表),但不能“简单地”达到目标。

我建议您用笔和一张纸坐下,逐步逐步解决问题,直到您正确理解要实现的目标以及如何思考该问题为止。为了解决它。完成此操作后,将您的想法放入代码中应该会容易得多。

这只是将您的编程问题分解为一系列简单步骤的问题。