LeetCodeの問題――ビット演算
1788 ワード
JavaScriptはLeetCode、ビット演算分類を解答します.続々と更新する
78サブセット
重複要素を含まない整数配列numsのセットを指定し、行列の可能なすべてのサブセット(べき乗セット)を返します.説明:重複サブセットは含まれません.
バイナリビット列
対応サブセット
000000
[]
000001
[1]
00000 010
[2]
00000 011
[1,2]
000000 100
[3]
00000 101
[1,3]
00000 110
[2,3]
00000 111
[1,2,3]
ここのスペースはあまり意味がありません.見やすいようにするためです.【普通は8桁を記憶していますので、ここでは3桁しか見られないので、これらのバイナリビット列はどうやってコンピュータに記憶されていますか?私たちは直接10進数字で表してもいいです.例えば1-8です.各セットの要素を表しています.つまり、1-8の8つの数字の中でどれが1桁かを比較すれば、これが分かります.サブセットは何ですか?
136一回だけの数字
非空整数配列を指定します.ある要素が一回しか現れない以外は、各要素に二回ずつ現れます.それは一回だけの要素を探してください.例1:a=0;0⊕a=a; a⊕b=b⊕a; a⊕b=(b⊕c)=(a⊕b)⊕c; 第一条では、二回の元素が現れたら、異種を行って結果を0にすることができます.【テーマの条件は太字で表示されます.】だから、例えば、「4,1,2,1,2,2,2,2」という行列について、すべての異種演算を行います.
ソリューション:
78サブセット
重複要素を含まない整数配列numsのセットを指定し、行列の可能なすべてのサブセット(べき乗セット)を返します.説明:重複サブセットは含まれません.
:
: nums = [1,2,3]
:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
ビット演算を使って解くには、まず、ビット列でサブセットを表すことを理解します.タイトルのようにnums=[1,2,3]は3桁のバイナリでそのサブセットを表すことができます.バイナリビット列
対応サブセット
000000
[]
000001
[1]
00000 010
[2]
00000 011
[1,2]
000000 100
[3]
00000 101
[1,3]
00000 110
[2,3]
00000 111
[1,2,3]
ここのスペースはあまり意味がありません.見やすいようにするためです.【普通は8桁を記憶していますので、ここでは3桁しか見られないので、これらのバイナリビット列はどうやってコンピュータに記憶されていますか?私たちは直接10進数字で表してもいいです.例えば1-8です.各セットの要素を表しています.つまり、1-8の8つの数字の中でどれが1桁かを比較すれば、これが分かります.サブセットは何ですか?
var subsets = function(nums)
{
var list=[]; //
var n=nums.length; //n
var l=Math.pow(2,n); // 1-l ,
var array=[];// array ,
for(let i=1;i
参考文章:LeetCode毎日の問題78.サブセット136一回だけの数字
非空整数配列を指定します.ある要素が一回しか現れない以外は、各要素に二回ずつ現れます.それは一回だけの要素を探してください.例1:
:[2,2,1]
:1
例2: :[4,1,2,1,2]
:4
ここでは主に異種の方法を使って検索します. 4⊕1⊕2⊕1⊕2
= 4⊕(1⊕1)⊕(2⊕2)
=4
ですから、この問題に対しては、行列内のすべての要素を異和的に演算しさえすれば、一回だけの数字が出てくるということになります.ソリューション:
var singleNumber = function(nums)
{
var n=0;
for(let i=0;i
個人ブログ:https://cucumber32.github.io/新しい一匹に萌えます.お互いに相談しましょう.