🙌

排他的論理和(XOR)

2024/09/22に公開

n 個の非負整数で構成される隠し整数配列 arr があります。

これは長さ n - 1 の別の整数配列にエンコードされ、encoded[i] = arr[i] XOR arr[i + 1] となります。たとえば、arr = [1,0,2,1] の場合、encoded = [1,2,3] となります。

エンコードされた配列が与えられます。また、arr の最初の要素である整数、つまり arr[0] が最初に与えられます。

元の配列 arr を返します。答えが存在し、一意であることが証明できます。

絶対値Math.abs()を使用しても、テストが通らない。

function decode(encoded: number[], first: number): number[] {
  let arr=[first];
  
  for(let i =0; i<encoded.length; i++ ){
    
    arr[i+1] = Math.abs(encoded[i] - arr[i]);  ☚ここ
    
  }
  return arr;
};

テスト

Wrong Answer

Input
encoded =[6]
first =1

Use Testcase
Output[1,5]  誤
Expected[1,7] 正

解決:排他的論理和(XOR)

function decode(encoded: number[], first: number): number[] {
  let arr=[first];
  
  for(let i =0; i<encoded.length; i++ ){
    
    arr[i+1] =  encoded[i] ^ arr[i];
    
  }
  return arr;
};

Discussion