📜  打印给定蒙版的所有子蒙版

📅  最后修改于: 2021-04-17 17:09:06             🧑  作者: Mango

给定一个整数N ,任务是打印由N的二进制表示形式中存在的置位位形成的该组的所有子集。

例子:

天真的方法:最简单的方法是遍历[0,1 <<((N中的设置位的数量) ]范围内的每个掩码,并检查是否除N中的位之外未设置其他位。然后打印。
时间复杂度: O(2 (N中的设置位数) )
辅助空间: O(1)

高效方法:上述方法可以仅通过遍历它们的掩模n中的子集中的submasks进行优化。

请按照以下步骤解决问题:

  • 初始化变量,例如S =N。
  • S> 0时进行迭代,并在每次迭代中打印S的值。
  • 分配S =(S – 1)&N。

下面是上述方法的实现:

C++
// C++ Program for above approach
#include 
using namespace std;
 
// Function to print the submasks of N
void SubMasks(int N)
{
    for (int S = N; S; S = (S - 1) & N) {
        cout << S << " ";
    }
}
 
// Driver Code
int main()
{
    int N = 25;
    SubMasks(N);
 
    return 0;
}


Java
// Java Program for above approach
import java.util.*;
class GFG
{
   
// Function to print the submasks of N
static void SubMasks(int N)
{
    for (int S = N; S > 0; S = (S - 1) & N)
    {
        System.out.print(S + " ");
    }
}
 
// Driver Code
public static void main(String args[])
{
    int N = 25;
    SubMasks(N);
}
}
 
// This code is contributed by SURENDRA_GANGWAR.


Python3
# Python3 program for the above approach
 
# Function to print the submasks of N
def SubMasks(N) :
    S = N
    while S > 0:
        print(S,end=' ')
        S = (S - 1) & N
 
# Driven Code
if __name__ == '__main__':
    N = 25
    SubMasks(N)
     
    # This code is contributed by bgangwar59.


C#
// C# program for the above approach
using System;
 
class GFG{
 
// Function to print the submasks of N
static void SubMasks(int N)
{
    for (int S = N; S > 0; S = (S - 1) & N)
    {
        Console.Write(S + " ");
    }
}
 
// Driver Code
static public void Main()
{
    int N = 25;
    SubMasks(N);
}
}
 
// This code is contributed by Code_hunt.


输出:
25 24 17 16 9 8 1

时间复杂度: O(2 (N中的设置位数) )
辅助空间: O(1)