本篇参照大佬博客练习题顺序,代码都是自打的,有些可能不是最优解。
目录
204. 计数质数
class Solution {
public:
int countPrimes(int n) {
int pr[n+1],s=0;
for(int i=2;i<n;i++)
{
pr[i]=0;
}
for(int i=2;i<n;i++)
{
if(pr[i]==0)
{
for(int j=2*i;j<n;j+=i)
{
pr[j]=1;
}
}
}
for(int i=2;i<n;i++)
{
if(pr[i]==0)
s++;
}
return s;
}
};
504. 七进制数
class Solution {
public:
string convertToBase7(int num) {
string ans="";
int n=abs(num);
if(n==0)
{
ans='0';
return ans;
}
while(n)
{
ans+='0'+n%7;
n/=7;
}
if(num<0)
ans+='-';
//cout<<ans;
reverse(ans.begin(),ans.end());
return ans;
}
};
405. 数字转换为十六进制数
class Solution {
public:
string toHex(long long num) {
string ans="",y="";
long long k=4294967296;
if(num<0)
num=k+num;
if(num==0)
return "0";
while(num)
{
int x=num%16;
num/=16;
if(x<10)
y+=(x+'0');
else if(x==10)
y+='a';
else if(x==11)
y+='b';
else if(x==12)
y+='c';
else if(x==13)
y+='d';
else if(x==14)
y+='e';
else if(x==15)
y+='f';
}
for(int i=y.size()-1;i>=0;i--)
ans+=y[i];
return ans;
}
};
168. Excel表列名称
class Solution {
public:
string convertToTitle(int n) {
string ans="",y="";
while(n)
{
int x=n%26;
n/=26;
if(x==0)
x=26,n--;
y+=(x-1+'A');
}
for(int i=y.size()-1;i>=0;i--)
ans+=y[i];
return ans;
}
};
172. 阶乘后的零
class Solution {
public:
int trailingZeroes(int n) {
int i=1,k=5,s=0;
while(k<=n)
{
s+=floor(n*1.0/k);
k*=5;
}
return s;
}
};
67. 二进制求和
class Solution {
public:
string addBinary(string a, string b) {
int i=a.size()-1,j=b.size()-1;
int flag=0;
string k="",ans="";
while(i>=0||j>=0||flag)
{
int x,y;
if(i<0)
x=0;
else
x=a[i]-'0';
if(j<0)
y=0;
else
y=b[j]-'0';
k+=((x+y+flag)%2+'0');
flag=(x+y+flag)/2;
i--;
j--;
}
for(int l=k.size()-1;l>=0;l--)
{
ans+=k[l];
}
return ans;
}
};
415. 字符串相加
class Solution {
public:
string addStrings(string num1, string num2) {
string ans="",s="";
int flag=0;
for(int i=num1.size()-1,j=num2.size()-1;;)
{
int k=num2[j]-'0'+num1[i]-'0'+flag;
if(k>=10)
{
s+=to_string(k-10);
num1[i]='0';
num2[j]='0';
flag=1;
}
else
{
s+=to_string(k);
num1[i]='0';
num2[j]='0';
flag=0;
}
//cout<<s<<endl;
if(i==0&&j==0)
break;
if(i>0)
i--;
if(j>0)
j--;
}
if(flag)
s+=to_string(flag);
for(int i=s.size()-1;i>=0;i--)
{
ans+=s[i];
}
return ans;
}
};
462. 最少移动次数使数组元素相等 II
class Solution {
public:
int minMoves2(vector<int>& nums) {
sort(nums.begin(),nums.end());
int n=nums.size();
int k=nums[n/2],s=0;
for(int i=0;i<n;i++)
{
s+=abs(nums[i]-k);
}
return s;
}
};
169. 多数元素
class Solution {
public:
int majorityElement(vector<int>& nums) {
int s=1,k=nums[0];
for(int i=1;i<nums.size();i++)
{
if(k==nums[i])
s++;
else
s--;
if(s==0)
{
s=1;
k=nums[i];
}
}
return k;
}
};
367. 有效的完全平方数
class Solution {
public:
bool isPerfectSquare(int num) {
for(int i=2;i<=min(num,1000000);i++)
{
int s=0;
while(num%i==0)
{
s++;
num/=i;
}
if(s%2==1)
return false;
}
if(num==1)
return true;
else
return false;
}
};
326. 3的幂
class Solution {
public:
bool isPowerOfThree(int n) {
if(n<=0)
return false;
while(n>1)
{
if(n%3==0)
n/=3;
else
return false;
}
return true;
}
};
238. 除自身以外数组的乘积
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int k=1;
vector<int>ans;
int flag=0;
for(int i=0;i<nums.size();i++)
{
if(flag==0)
{
if(nums[i]==0)
flag=1;
else
k*=nums[i];
}
else
k*=nums[i];
}
for(int i=0;i<nums.size();i++)
{
if(flag==0)
ans.push_back(k/nums[i]);
else
{
if(nums[i]==0)
ans.push_back(k);
else
ans.push_back(0);
}
}
return ans;
}
};
628. 三个数的最大乘积
class Solution {
public:
int maximumProduct(vector<int>& nums) {
sort(nums.begin(),nums.end());
int k=nums.size();
if(nums[0]<0&&nums[1]<0)
{
if(nums[k-1]>=0)
{
int max1=max(nums[0]*nums[1],nums[k-3]*nums[k-2]);
return max1*nums[k-1];
}
else
{
return nums[k-1]*nums[k-2]*nums[k-3];
}
}
else
{
return nums[k-1]*nums[k-2]*nums[k-3];
}
}
};