leetcode每日一题21

文章讲述了如何将Excel中的26进制列标题转换为十进制数,提供了两种不同的实现方式,一种避免使用pow函数以提高效率。同时,文章还介绍了如何进行二进制位的翻转操作,通过位运算从低位到高位枚举并反转二进制位。
摘要由CSDN通过智能技术生成

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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值