Dados dos números, debe verificar si son anagramas entre sí o no en representación binaria.
Ejemplos:
Input : a = 8, b = 4 Output : Yes Binary representations of both numbers have same 0s and 1s. Input : a = 4, b = 5 Output : No
Enfoque sencillo:
- Encuentre la representación binaria de ‘a’ y ‘b’ usando una técnica simple de representación decimal a binaria.
- Comprobar si dos representaciones binarias son un anagrama
A continuación se muestra la implementación del enfoque anterior:
C++
// A simple C++ program to check if binary // representations of two numbers are anagram. #include <bits/stdc++.h> #define ull unsigned long long int using namespace std; const int SIZE = 8 * sizeof(ull); bool bit_anagram_check(ull a, ull b) { // Find reverse binary representation of a // and store it in binary_a[] int i = 0, binary_a[SIZE] = { 0 }; while (a > 0) { binary_a[i] = a % 2; a /= 2; i++; } // Find reverse binary representation of b // and store it in binary_a[] int j = 0, binary_b[SIZE] = { 0 }; while (b > 0) { binary_b[j] = b % 2; b /= 2; j++; } // Sort two binary representations sort(binary_a, binary_a + SIZE); sort(binary_b, binary_b + SIZE); // Compare two sorted binary representations for (int i = 0; i < SIZE; i++) if (binary_a[i] != binary_b[i]) return false; return true; } // Driver code int main() { ull a = 8, b = 4; cout << bit_anagram_check(a, b) << endl; return 0; }
Java
// A simple Java program to check if binary // representations of two numbers are anagram import java.io.*; import java.util.*; class GFG { public static int SIZE = 8; // Function to check if binary representation // of two numbers are anagram static int bit_anagram_check(long a, long b) { // Find reverse binary representation of a // and store it in binary_a[] int i = 0; long[] binary_a = new long[SIZE]; Arrays.fill(binary_a, 0); while (a > 0) { binary_a[i] = a%2; a /= 2; i++; } // Find reverse binary representation of b // and store it in binary_a[] int j = 0; long[] binary_b = new long[SIZE]; Arrays.fill(binary_b, 0); while (b > 0) { binary_b[j] = b%2; b /= 2; j++; } // Sort two binary representations Arrays.sort(binary_a); Arrays.sort(binary_b); // Compare two sorted binary representations for (i = 0; i < SIZE; i++) if (binary_a[i] != binary_b[i]) return 0; return 1; } // driver program public static void main (String[] args) { long a = 8, b = 4; System.out.println(bit_anagram_check(a, b)); } } // Contributed by Pramod Kumar
Python3
# A simple Python program to check if binary # representations of two numbers are anagram. SIZE = 8 def bit_anagram_check(a, b): # Find reverse binary representation of a # and store it in binary_a[] global size i = 0 binary_a = [0] * SIZE while (a > 0): binary_a[i] = a % 2 a //= 2 i += 1 # Find reverse binary representation of b # and store it in binary_a[] j = 0 binary_b = [0] * SIZE while (b > 0): binary_b[j] = b % 2 b //= 2 j += 1 # Sort two binary representations binary_a.sort() binary_b.sort() # Compare two sorted binary representations for i in range(SIZE): if (binary_a[i] != binary_b[i]): return 0 return 1 # Driver code if __name__ == "__main__": a = 8 b = 4 print(bit_anagram_check(a, b)) # This code is contributed by ukasp.
C#
// A simple C# program to check if // binary representations of two // numbers are anagram using System; class GFG { public static int SIZE = 8; // Function to check if binary // representation of two numbers // are anagram public static int bit_anagram_check(long a, long b) { // Find reverse binary representation // of a and store it in binary_a[] int i = 0; long[] binary_a = new long[SIZE]; Arrays.Fill(binary_a, 0); while (a > 0) { binary_a[i] = a % 2; a /= 2; i++; } // Find reverse binary representation // of b and store it in binary_a[] int j = 0; long[] binary_b = new long[SIZE]; Arrays.Fill(binary_b, 0); while (b > 0) { binary_b[j] = b % 2; b /= 2; j++; } // Sort two binary representations Array.Sort(binary_a); Array.Sort(binary_b); // Compare two sorted binary // representations for (i = 0; i < SIZE; i++) { if (binary_a[i] != binary_b[i]) { return 0; } } return 1; } public static class Arrays { public static T[] CopyOf<T>(T[] original, int newLength) { T[] dest = new T[newLength]; System.Array.Copy(original, dest, newLength); return dest; } public static T[] CopyOfRange<T>(T[] original, int fromIndex, int toIndex) { int length = toIndex - fromIndex; T[] dest = new T[length]; System.Array.Copy(original, fromIndex, dest, 0, length); return dest; } public static void Fill<T>(T[] array, T value) { for (int i = 0; i < array.Length; i++) { array[i] = value; } } public static void Fill<T>(T[] array, int fromIndex, int toIndex, T value) { for (int i = fromIndex; i < toIndex; i++) { array[i] = value; } } } // Driver Code public static void Main(string[] args) { long a = 8, b = 4; Console.WriteLine(bit_anagram_check(a, b)); } } // This code is contributed by Shrikant13
Javascript
<script> // A simple Javascript program to check if binary // representations of two numbers are anagram let SIZE = 8; // Function to check if binary representation // of two numbers are anagram function bit_anagram_check(a,b) { // Find reverse binary representation of a // and store it in binary_a[] let i = 0; let binary_a = new Array(SIZE); for(let i=0;i<SIZE;i++) { binary_a[i]=0; } while (a > 0) { binary_a[i] = a%2; a = Math.floor(a/2); i++; } // Find reverse binary representation of b // and store it in binary_a[] let j = 0; let binary_b = new Array(SIZE); for(let i=0;i<SIZE;i++) { binary_b[i]=0; } while (b > 0) { binary_b[j] = b%2; b = Math.floor(b/2); j++; } // Sort two binary representations binary_a.sort(function(a,b){return a-b;}); binary_b.sort(function(a,b){return a-b;}); // Compare two sorted binary representations for (i = 0; i < SIZE; i++) if (binary_a[i] != binary_b[i]) return 0; return 1; } // driver program let a = 8, b = 4; document.write(bit_anagram_check(a, b)); //This code is contributed by rag2127 </script>
1
Tenga en cuenta que el código anterior utiliza funciones específicas de GCC. Si deseamos escribir código para otros compiladores, podemos usar Count set bits en un entero .
Complejidad de tiempo: O (1)
Espacio auxiliar: O (1) No se utiliza espacio adicional.
Otro enfoque : si el número de bits establecidos en dos números es igual, entonces sus representaciones binarias son anagramas.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to check if binary // representations of two numbers are anagrams. #include <bits/stdc++.h> using namespace std; // Check each bit in a number is set or not // and return the total count of the set bits. int countSetBits(int n) { int count = 0; while (n) { count += n & 1; n >>= 1; } return count; } bool areAnagrams(int A, int B) { return countSetBits(A) == countSetBits(B); } // Driver code int main() { int a = 8, b = 4; cout << areAnagrams(a, b) << endl; return 0; } // This code is contributed by phasing17
Java
// Java program to check if binary // representations of two numbers are anagrams. import java.util.*; class GFG { // Check each bit in a number is set or not // and return the total count of the set bits. public static int countSetBits(int n) { int count = 0; while (n != 0) { count += n & 1; n >>= 1; } return count; } public static boolean areAnagrams(int A, int B) { return countSetBits(A) == countSetBits(B); } // Driver code public static void main(String[] args) { int a = 8; int b = 4; System.out.println(areAnagrams(a, b)); } } // This code is contributed by phasing17
Python3
# Python3 program to check if binary # representations of two numbers are anagrams. # Check each bit in a number is set or not # and return the total count of the set bits. def countSetBits(n) : count = 0 while n>0 : count += n & 1 n >>= 1 return count def areAnagrams(A, B) : return countSetBits(A) == countSetBits(B) # Driver code if __name__ == "__main__" : a,b = 8,4 if areAnagrams(a, b) : print("1") else : print("0") # this code is contributed by aditya942003patil
C#
// C# program to check if binary // representations of two numbers are anagrams. using System; public static class GFG { // Check each bit in a number is set or not // and return the total count of the set bits. public static int countSetBits(int n) { int count = 0; while (n != 0) { count += n & 1; n >>= 1; } return count; } public static bool areAnagrams(int A, int B) { return countSetBits(A) == countSetBits(B); } // Driver code public static void Main() { int a = 8; int b = 4; Console.Write(areAnagrams(a, b)); Console.Write("\n"); } } // This code is contributed by Aarti_Rathi
1
Tiempo Complejidad : O (1)
Espacio Auxiliar : O (1)
Este artículo es una contribución de Aarti_Rathi y Aditya Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA