171. Excel 表列序号
26进制转十进制
就是168题的逆运算呗
class Solution {
public:
int titleToNumber(string columnTitle) {
int num=0;
int len=columnTitle.length();
for(int i=0;i<len;i++)
{
int temp=int(columnTitle[len-i-1])-65+1;
num+=temp*pow(26,i);
}
return num;
}
};
但是因为使用了pow函数作为幂函数,所以运行速度慢下来了
应该在每次循环时对26进行累乘
class Solution {
public:
int titleToNumber(string columnTitle) {
int number = 0;
long multiple = 1;
for (int i = columnTitle.size() - 1; i >= 0; i--) {
int k = columnTitle[i] - 'A' + 1;
number += k * multiple;
multiple *= 26;
}
return number;
}
};
190. 颠倒二进制位
位运算
但是我也不是很会
题解中说:
将 n 视作一个长为 32 的二进制串,从低位往高位枚举 n 的每一位,将其倒序添加到翻转结果 rev 中。 代码实现中,每枚举一位就将 n
右移一位,这样当前 n 的最低位就是我们要枚举的比特位。当 n 为 0 时即可结束循环。
n&1的结果和n的最后一位相同,等于是取出了n的最后一位,再把这一位左移31-i位就移到了翻转之后对称的位置
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
int i=32;
uint32_t ans=0;
while(i--)
{
ans|=(n&1)<<i;
n>>=1;
}
return ans;
}
};