LeetCodeの問題――ビット演算

1788 ワード

JavaScriptはLeetCode、ビット演算分類を解答します.続々と更新する
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
ここでは主に異種の方法を使って検索します.
  • 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」という行列について、すべての異種演算を行います.
        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/新しい一匹に萌えます.お互いに相談しましょう.