标签:arr int 解码 异或 数组 encode encoded first
一、题目描述
给定一个非负整数数组arr,经过编码后新数组encode的长度为n-1,编码的规则为encode[i] = arr[ i ] ★arr [i+1] (★为异或符)。给出编码后encode数组,和原来数组的第一个元素。返回解码后的arr数组。
输入:encoded = [1,2,3], first = 1
输出:[1,0,2,1]
输入:encoded = [6,2,7,3], first = 4
输出:[4,2,0,7,4]
二、题目分析
可以通过★运算反向推理的出
encode[i-1] = arr[ i ] ★ arr [i-1]
encode[i-1] ★ arr [i-1] = arr[ i ] ★arr [i-1] ★ arr [i-1]
encode[i-1] ★ arr [i-1] = arr[ i ]
注:
位运算这里指定是将整数先转换为二进制数,然后再进行位运算,1★1或 0★0 都为0,1★0为1;所以得0★任何数都为任何数。任何数★任何数都0;
三、解题思路
通过推导encode[i] ★ arr [i+1] = arr[ i ]得到每一位数。
代码实现:
public int[] decode(int[] encoded, int first) {
int n = encoded.length+1;
int[] arr = new int[n];
arr[0] = first;
for(int i = 1; i<n; i++){
arr[i] = encoded[i-1] ^ arr[i-1];
}
return arr;
}
标签:arr,int,解码,异或,数组,encode,encoded,first 来源: https://www.cnblogs.com/zjjtt/p/16653922.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。