481. 神奇字符串
思路
字符 ‘1’ 变 ‘2’,‘2’ 变 ‘1’ 可以用「异或 3」来实现。‘1’ 的 ASCII 码为 49,‘2’ 的 ASCII 码为 50。转换为二进制就是 ‘1’ = 0011 0001,‘2’ = 0011 0010。可以看到只有最后两位是不同的,而 0 变 1,1 变 0 可以用「异或 1 」来实现。所以 01 ^ 11 = 10,10 ^ 11 = 01
class Solution {
public:
int magicalString(int n) {
string s = "122";
char c = '1';
for (int i = 2; i < n; i++) {
if (s[i] == '1') {
s += string(1, c);
} else {
s += string(2, c);
}
// c = c == '1' ? '2' : '1';
c ^= 3;
}
// #include <algorithm>
return count(s.begin(), s.begin() + n, '1');
}
};