整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
示例2:
提示:
这道题纯纯是一道简单的题,只需要你对标准库中的bitset类型了解就十分的简单。
再不济也要了解位运算的相关知识,但是如果是使用位运算符进行写代码了话,会使的代码看的十分的繁琐。建议大家都去掌握bitset这种数据结构,谁用谁知道。而且bitset占的空间还小,你设置多少位,它也就占多少bit而已。这种数据结构的空间复杂度为O(1)
下面我将这两种基础知识的文章链接给到下方,基础不牢的同学可以去看看。
思路也就是对比两个数的二进制位有没有不相同的,找到不相同的记一下个数就好。
代码如下:
class Solution {
public:int convertInteger(int A, int B) {bitset<32> a(A);bitset<32> b(B);int count = 0;for(int i = 0; i < 32; ++i){if(a[i] != b[i]){++count;}}return count;}
};
这段代码的时间复杂度为O(1),因为它的for循环只遍历了一个长度为常数32的bitset,所以它的时间复杂度是常数级别的。
这段代码的空间复杂度为O(1),因为它只使用了常数级别的空间,即两个长度为32的bitset和一个int变量,它们的空间占用量都是常数级别的。
这是一道十足的简单题,用来给自己涨信心的。需要你对bitset数据结构与位运算有基本的了解。