bool isPerfectSquare(int num) {
//用库函数
//int x=(int)sqrt(num);
//return x*x==num;
int ans=0;
//1 <= num <= 2^31 - 1 怕溢出 强转
for(int i=0;i<=num/2+1;i++)
{
if((long long)i*i<=num)
ans=i;
else
break;
}
return (long long)ans*ans==num;
}
bool isPowerOfFour(int n) {
if(n<=0)
return false;
if(n==1)
return true;
long long ans=1;
while(1)
{
ans*=4;
if(ans==n)
return true;
else if(ans>n)
return false;
}
return false;
}
class Solution {
public:
vector<int> swapNumbers(vector<int>& numbers) {
//-2147483647 <= numbers[i] <= 2147483647
vector<int> ret;
ret.push_back(numbers[1]);
ret.push_back(numbers[0]);
return ret;
}
};
或者位运算
在这里插入代码片
int multiply(int A, int B) {
//递归
int Max=max(A,B);
int Min=min(A,B);
if(Min==0)
return 0;
//Min*Max=(Min-1+1) * Max=(Min-1)*Max+Max
return multiply(Min-1,Max)+Max;
}
bool isSameAfterReversals(int num) {
if(num==0)
return true;
if(num%10==0)
return false;
else
return true;
// return !num||num%10;
}
或者三次反转
string reverseLeftWords(string s, int n) {
int len=s.size();
string str=s;
for(int i=0;i<len;++i)
{
str[i]=s[(i+n)%len];
}
return str;
}
bool squareIsWhite(string coordinates) {
//ASCII码
//分析: coordinates[0]-'a'+j,如果为奇数(x,y),则为白色
int ans=coordinates[0]-'a'+coordinates[1]-'1';
if(ans%2!=0)
return true;
else
return false;
}
异或运算
136. 只出现一次的数字
int singleNumber(vector<int>& nums) {
//异或运算
//0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0
//转换为2进制了,不同就相加,相同就相减
int ans=0;
for(int i=0;i<nums.size();++i)
{
ans^=nums[i];
}
return ans;
}
int missingNumber(vector<int>& nums) {
int n=nums.size();
int sum=n*(n+1)/2;
for(int i=0;i<n;++i)
{
sum-=nums[i];
}
return sum;
}
int missingNumber(vector<int>& nums) {
//异或运算
int n=nums.size()+1;
//有n项,最大项为n-1
int sum=n*(n-1)/2;
// for(int i=0;i<n;++i)
// {
// sum+=i;
// }
//Sn=n(a1+an)/2
for(int i=0;i<nums.size();++i)
{
sum-=nums[i];
}
return sum;
}
int xorOperation(int n, int start) {
int ans=0;
//int nums[1010];
// for(int i=0;i<n;++i)
// {
// nums[i]=start+2*i;
// ans^=nums[i];
// }
//简洁版:
for(int i=0;i<n;++i)
{
ans^=start+i*2;
}
return ans;
}