给定两个正整数A和B ,任务是翻转A和B中的公共设置位。
例子:
Input: A = 7, B = 4
Output: 3 0
Explanation:
The binary representation of 7 is 111
The binary representation of 4 is 100
Since the 3rd bit of both A and B is a set bit. Therefore, flipping the 3rd bit of A and B modifies A = 3 and B = 0
Therefore, the required output is 3 0
Input: A = 10, B = 20
Output: 10 20
天真的方法:解决此问题的最简单方法是检查A和B的第i位是否为集合。如果发现是正确的,则翻转A和B的第i位。最后,打印A和B的更新值。
下面是上述方法的实现:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to flip bits of A and B
// which are set bits in A and B
void flipBitsOfAandB(int A, int B)
{
// Iterater all possible bits
// of A and B
for (int i = 0; i < 32; i++) {
// If ith bit is set in
// both A and B
if ((A & (1 << i)) && (B & (1 << i))) {
// Clear i-th bit of A
A = A ^ (1 << i);
// Clear i-th bit of B
B = B ^ (1 << i);
}
}
// Print A and B
cout << A << " " << B;
}
// Driver Code
int main()
{
int A = 7, B = 4;
flipBitsOfAandB(A, B);
return 0;
}
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to flip bits of A and B
// which are set bits in A and B
static void flipBitsOfAandB(int A, int B)
{
// Iterater all possible bits
// of A and B
for(int i = 0; i < 32; i++)
{
// If ith bit is set in
// both A and B
if (((A & (1 << i)) &
(B & (1 << i))) != 0)
{
// Clear i-th bit of A
A = A ^ (1 << i);
// Clear i-th bit of B
B = B ^ (1 << i);
}
}
// Print A and B
System.out.print(A + " " + B);
}
// Driver Code
public static void main(String[] args)
{
int A = 7, B = 4;
flipBitsOfAandB(A, B);
}
}
// This code is contributed by code_hunt
Python3
# Python3 program to implement
# the above approach
# Function to flip bits of A and B
# which are set in both of them
def flipBitsOfAandB(A, B):
# Iterate all possible bits of
# A and B
for i in range(0, 32):
# If ith bit is set in
# both A and B
if ((A & (1 << i)) and
(B & (1 << i))):
# Clear i-th bit of A
A = A ^ (1 << i)
# Clear i-th bit of B
B = B ^ (1 << i)
print(A, B)
# Driver Code
if __name__ == "__main__" :
A = 7
B = 4
flipBitsOfAandB(A, B)
# This code is contributed by Virusbuddah_
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to flip bits of A and B
// which are set bits in A and B
static void flipBitsOfAandB(int A, int B)
{
// Iterater all possible bits
// of A and B
for(int i = 0; i < 32; i++)
{
// If ith bit is set in
// both A and B
if (((A & (1 << i)) &
(B & (1 << i))) != 0)
{
// Clear i-th bit of A
A = A ^ (1 << i);
// Clear i-th bit of B
B = B ^ (1 << i);
}
}
// Print A and B
Console.Write(A + " " + B);
}
// Driver Code
public static void Main(string[] args)
{
int A = 7, B = 4;
flipBitsOfAandB(A, B);
}
}
// This code is contributed by chitranayal
Javascript
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to flip bits of A and B
// which are set in both of them
void flipBitsOfAandB(int A, int B)
{
// Clear the bits of A which
// are set in both A and B
A = A ^ (A & B);
// Clear the bits of B which
// are set in both A and B
B = B ^ (A & B);
// Print updated A and B
cout << A << " " << B;
}
// Driver Code
int main()
{
int A = 10, B = 20;
flipBitsOfAandB(A, B);
return 0;
}
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to flip bits of A and B
// which are set in both of them
static void flipBitsOfAandB(int A, int B)
{
// Clear the bits of A which
// are set in both A and B
A = A ^ (A & B);
// Clear the bits of B which
// are set in both A and B
B = B ^ (A & B);
// Print updated A and B
System.out.print(A + " " + B);
}
// Driver Code
public static void main(String[] args)
{
int A = 10, B = 20;
flipBitsOfAandB(A, B);
}
}
// This code is contributed by sanjoy_62
Python3
# Python3 program to implement
# the above approach
# Function to flip bits of A and B
# which are set in both of them
def flipBitsOfAandB(A, B):
# Clear the bits of A which
# are set in both A and B
A = A ^ (A & B)
# Clear the bits of B which
# are set in both A and B
B = B ^ (A & B)
# Print updated A and B
print(A, B)
# Driver Code
if __name__ == "__main__" :
A = 10
B = 20
flipBitsOfAandB(A, B)
# This code is contributed by Virusbuddah_
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to flip bits of A and B
// which are set in both of them
static void flipBitsOfAandB(int A, int B)
{
// Clear the bits of A which
// are set in both A and B
A = A ^ (A & B);
// Clear the bits of B which
// are set in both A and B
B = B ^ (A & B);
// Print updated A and B
Console.Write(A + " " + B);
}
// Driver Code
public static void Main(String[] args)
{
int A = 10, B = 20;
flipBitsOfAandB(A, B);
}
}
// This code is contributed by Amit Katiyar
Javascript
3 0
时间复杂度: O(32)
辅助空间: O(1)
高效方法:为了优化上述方法,该思想基于以下观察结果:
Find the bits which are set bits in both A and B using (A & B).
Clear the bits of A which are set bits in both A and B using A = (A ^ (A & B))
Cleat the bits of B which are set bits in both A and B using B = (B ^ (A & B))
请按照以下步骤解决问题:
- 更新A =(A ^(A&B)) 。
- 更新B =(B ^(A&B)) 。
- 最后,打印A和B的更新值。
下面是上述方法的实现:
C++
// C++ program to implement
// the above approach
#include
using namespace std;
// Function to flip bits of A and B
// which are set in both of them
void flipBitsOfAandB(int A, int B)
{
// Clear the bits of A which
// are set in both A and B
A = A ^ (A & B);
// Clear the bits of B which
// are set in both A and B
B = B ^ (A & B);
// Print updated A and B
cout << A << " " << B;
}
// Driver Code
int main()
{
int A = 10, B = 20;
flipBitsOfAandB(A, B);
return 0;
}
Java
// Java program to implement
// the above approach
import java.util.*;
class GFG{
// Function to flip bits of A and B
// which are set in both of them
static void flipBitsOfAandB(int A, int B)
{
// Clear the bits of A which
// are set in both A and B
A = A ^ (A & B);
// Clear the bits of B which
// are set in both A and B
B = B ^ (A & B);
// Print updated A and B
System.out.print(A + " " + B);
}
// Driver Code
public static void main(String[] args)
{
int A = 10, B = 20;
flipBitsOfAandB(A, B);
}
}
// This code is contributed by sanjoy_62
Python3
# Python3 program to implement
# the above approach
# Function to flip bits of A and B
# which are set in both of them
def flipBitsOfAandB(A, B):
# Clear the bits of A which
# are set in both A and B
A = A ^ (A & B)
# Clear the bits of B which
# are set in both A and B
B = B ^ (A & B)
# Print updated A and B
print(A, B)
# Driver Code
if __name__ == "__main__" :
A = 10
B = 20
flipBitsOfAandB(A, B)
# This code is contributed by Virusbuddah_
C#
// C# program to implement
// the above approach
using System;
class GFG{
// Function to flip bits of A and B
// which are set in both of them
static void flipBitsOfAandB(int A, int B)
{
// Clear the bits of A which
// are set in both A and B
A = A ^ (A & B);
// Clear the bits of B which
// are set in both A and B
B = B ^ (A & B);
// Print updated A and B
Console.Write(A + " " + B);
}
// Driver Code
public static void Main(String[] args)
{
int A = 10, B = 20;
flipBitsOfAandB(A, B);
}
}
// This code is contributed by Amit Katiyar
Java脚本
10 20
时间复杂度: O(1)
辅助空间: O(1)