题意
给你和
,求
到
之间所有数字的异或。
题解
首先区间之间的异或怎么计算呢,若知道和
之间的异或值,那么最后的答案就是
。
那么如何计算的异或值呢,我们可以打个表先来看看。
1 1 2 3 3 0 4 4 5 1 6 7 7 0 8 8 9 1 10 11 11 0 12 12 13 1 14 15 15 0 16 16 17 1 18 19 19 0 20 20
会发现规律实际上很明显,以4个一组即,所以对于给定的
我们对其取模4就知道
的异或值了,后续就好做了。
复杂度
时间复杂度
空间复杂度
代码
class Solution { public: /** * * @param l long长整型 * @param r long长整型 * @return long长整型 */ long long f(long long n) { if(n%4==1) return 1; else if(n%4==2) return n+1; else if(n%4==3) return 0; else return n; } long long XOR(long long l, long long r) { // write code here return f(r)^f(l-1); } };