連休の自習

6670 ワード

Toy 11.Powerset


集合として文字列を入力し、各文字で作成できるすべての部分集合を返す必要があります.

I/O例

let output1 = powerSet('abc');
console.log(output1); // ['', 'a', 'ab', 'abc', 'ac', 'b', 'bc', 'c']

let output2 = powerSet('jjump');
console.log(output2); // ['', 'j', 'jm', 'jmp', 'jmpu', 'jmu', 'jp', 'jpu', 'ju', 'm', 'mp', 'mpu', 'mu', 'p', 'pu', 'u']
const powerSet = function (str) { //str= 'abc'
  const set = Array.from(new Set(str));
  //자료구조 set 객체 //중복을 허락하지 않는다. //Array.from 얕은복사
  set.sort(); 
  let newStr = set.join(""); 

  let result = [];
  function recursion(string, begin) { 
    result.push(string);
    for(let i = begin; i < newStr.length; i++) {
      recursion(string + newStr[i], i + 1);
    }
  }

  recursion('', 0);
  return result;
};
以前は全然分かりませんでしたが、絵を描いたら分かりました.
青い字は出力順です.

!!論理演算子


JavaScriptには2つの感嘆符(!)があります.他のタイプのデータを明示的にブール型変換(Type Conversion)として用いたという.
let a 
console.log(a) //undefined
console.log(!a) //true
console.log(!!a) //false

それ以外は


!! 論理演算子
ソートアルゴリズム
アルゴリズムの問題を見てもソートにはいろいろな種類があることがわかりました.