記事のディレクトリ
トピック
1720. XORをデコードした後の
配列不明な整数配列arrは、n個の非負の整数で構成されています。
エンコードされた後、長さn-1でエンコードされた別の整数配列になります。ここで、encoded [i] = arr [i] XOR arr [i +1]です。たとえば、arr = [1,0,2,1]は、エンコード後にエンコード= [1,2,3]になります。
エンコードされた配列をエンコードし、元の配列arrの最初の要素(arr [0])を指定します。
元の配列arrをデコードして返してください。答えが存在し、ユニークであることを証明することができます。
例1:
输入:encoded = [1,2,3], first = 1
输出:[1,0,2,1]
解释:若 arr = [1,0,2,1] ,那么 first = 1 且 encoded = [1 XOR 0, 0 XOR 2, 2 XOR 1] = [1,2,3]
例2:
输入:encoded = [6,2,7,3], first = 4
输出:[4,2,0,7,4]
促す:
2 <= n <= 104
encoded.length == n - 1
0 <= encoded[i] <= 105
0 <= first <= 105
ソリューション(Java)
タイトルのXORは排他的論理和を表します。2つの数値の排他的論理和は、2つの数値を2進数に変換し、ビットごとに排他的論理和を実行した結果です。排他的論理和は
Javaでは「^」で表されます。
エンコード[i] = arr [i] ^ arr [i + 1]
—>エンコード[i] ^ arr [i] = arr [i] ^ arr [i] ^ arr [i + 1]
—>エンコード[i] ^ arr [i] = 0 ^ arr [i + 1]
—>エンコード[i] ^ arr [i] = arr [i + 1]
class Solution
{
public int[] decode(int[] encoded, int first)
{
int[] arr = new int[encoded.length + 1];
arr[0] = first;
for(int index = 1;index < arr.length;index++)
{
arr[index] = arr[index - 1] ^ encoded[index - 1];
}
return arr;
}
}