C++でのバイナリ表現の循環順列
2つの整数nがあり、開始するとします。私たちのタスクは、次のように(0,1,2 .....、2 ^ n -1)の順列pを返すことです-
- p[0]=開始
- p[i]とp[i+ 1]は、バイナリ表現が1ビットだけ異なります。
- p[0]とp[2^ n -1]も、バイナリ表現で1ビットだけ異なる必要があります。
したがって、入力がn=2およびstart=3の場合、返される配列は[3,2,0,1]になり、これらは[11,10,00,01]
になります。これを解決するには、次の手順に従います-
- ansは配列です
- 0〜2^nの範囲のiの場合
- start XOR i XOR i/2をansに挿入します
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector<int> circularPermutation(int n, int start) { vector <int> ans; for(int i = 0 ; i < 1<<n; i++){ ans.push_back(start ^ i ^(i>>1)); } return ans; } }; main(){ Solution ob; print_vector(ob.circularPermutation(5,3)); }
入力
5 3
出力
[3, 2, 0, 1, 5, 4, 6, 7, 15, 14, 12, 13, 9, 8, 10, 11, 27, 26, 24, 25, 29, 28, 30, 31, 23, 22, 20, 21, 17, 16, 18, 19, ]
-
C++での特定の数値のバイナリ表現
2進数 は、0と1の2桁のみで構成される数値です。たとえば、01010111。 特定の数値を2進数で表すにはさまざまな方法があります。 再帰的方法 このメソッドは、再帰を使用して2進数形式で数値を表すために使用されます。 アルゴリズム Step 1 : if number > 1. Follow step 2 and 3. Step 2 : push the number to a stand. Step 3 : call function recursively with number/2 Step 4 : pop number from stack and print remai
-
数値の2進表現がPythonの回文であるかどうかを確認します
数nがあるとします。 nのバイナリ表現が回文であるかどうかを確認する必要があります。 したがって、入力がn =9の場合、9のバイナリ表現が1001であるため、出力はTrueになります。これは回文です。 これを解決するには、次の手順に従います- ans:=0 0の場合、do ans:=ans * 2 numが奇数の場合、 ans:=ans XOR 1 num:=num / 2 回答を返す 理解を深めるために、次の実装を見てみましょう- 例 def reverse_binary(num) : ans = 0