Leetcode07
T342 4的幂
给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x
-
位运算
class Solution { public: bool isPowerOfFour(int n) { return (n > 0) && (n & (n - 1)) == 0 && (n & 0xAAAAAAAA) ==0; } };
-
4的幂需要满足2的幂的特性
-
4的幂同时具有自己的特性,二进制中1的位置都在奇数位上
4:100
16:10000
-
将4的幂中1可能出现的特征位置都填上,即为
01010101010101010101010101010100
10101010101010101010101010101010(0xAAAAAAAA)
刚好4的幂有1的地方0xAAAAAAAA都为0,即位运算为0
-
-
暴力求解(循环代替递归防止超出时间限制)
class Solution { public: bool isPowerOfFour(int n) { long i=4,a=1; if(n==1) return true; while(pow(i,a)<pow(2,31)-1)//题目条件范围限制 { if(pow(i,a)==n) { return true; } a++; } return false; } };
-
pow函数
#include<cmath> //必要头文件 pow(x,y); //x的y次方 一般来说的正确用法是pow(int,double) 如:pow(2,2.0)
-
T125验证回文串
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s
,如果它是 回文串 ,返回 true
;否则,返回 false
。
准备前提:对字符串 s 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串sgood 中
-
字符串翻转API(c++:)
class Solution { public: bool isPalindrome(string s) { string sgood; for (char ch: s) { if (isalnum(ch)) {// sgood += tolower(ch); } } string sgood_rev(sgood.rbegin(), sgood.rend()); return sgood == sgood_rev; } };
-
增强for循环
for(声明语句 : 表达式) { //代码句子 //声明语句:声明新的局部变量,与数组元素的类型匹配,用作输出或传值 //表达式:访问的数组名 } for (char ch: s)
-
isalnum()函数
判断一个字符是否是字母或者(十进制)数字,若为字母或者数字,则返回True(非0值),否者返回False(0) int isalnum (int c) #include<cctype>//头文件
-
tolower()函数
将给定字符转换为小写 tolower(int ch);//语法 #include<cctype>//头文件
-
std::string中的反向迭代器rbegin()、rend()
rbegin():表示string字符串的倒数第一个字符 rend():表示string字符串的正数第一个字符 string sgood_rev(sgood.rbegin(), sgood.rend());//string类使用
-
-
双指针(头尾进位比较)
class Solution { public: bool isPalindrome(string s) { string sgood; for (char ch: s) { if (isalnum(ch)) { sgood += tolower(ch); } } int n = sgood.size();//string函数 int left = 0, right = n - 1; while (left < right) { if (sgood[left] != sgood[right]) { return false; } ++left; --right; } return true; } };