目录
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。
第1题:剪绳子1
试题要求如下:
回答(C语言):
int cuttingRope(int n){
int num = 1;
if(n == 2)
return 1;
if(n == 3)
return 2;
while(n > 4){
n = n - 3;
num = num * 3;
}
return num * n;
}
//解析:https://leetcode-cn.com/problems/integer-break/solution/343-zheng-shu-chai-fen-tan-xin-by-jyd/
运行效率如下所示:
第2题:Excel表列序号
试题要求如下:
回答(C语言):
int titleToNumber(char * s){
int i=0;
long num=0;
while(s[i]!='\0'){
num=num*26+s[i]-'A'+1;
i++;
}
return num;
}
运行效率如下所示:
第3题:阶乘后的零
试题要求如下:
回答(C语言):
int trailingZeroes(int n){
int count = 0;
while(n >= 5) {
count += n / 5;
n /= 5;
}
return count;
}
运行效率如下所示:
第4题:位1的个数
试题要求如下:
回答(C语言):
int hammingWeight(uint32_t n) {
int cou=0;
while(n){
if(n%2==1){
cou++;
}
n/=2;
}
return cou;
}
运行效率如下所示:
第5题:快乐数
试题要求如下:
回答(C语言):
bool isHappy(int n){
while(1){
if(n<10){
if(n==1 || n==7)return true;
else return false;
}
int sum=0;
while(n!=0){
sum=sum+(n%10)*(n%10);
n=n/10;
}
n=sum;
}
}
//在小于10的数中只由1和7是快乐数
运行效率如下所示:
第6题:颠倒二进制
试题要求如下:
回答(C语言):
uint32_t reverseBits(uint32_t n) {
uint32_t ans=0;
int i=32;
while(i--){
ans<<=1;
ans+=n&1;
n>>=1;
}
return ans;
}
运行效率如下所示:
第7题:字符串压缩
试题要求如下:
回答(C语言):
char* compressString(char* S){
int size = strlen(S);
if (size <= 2) return S;
char* str = (char*)malloc(sizeof(char) * (2 * size));
str[0] = S[0];
int count = 1, index = 1;
for (int i = 1; i < size + 1; i++) {
if (S[i] == S[i - 1]) {
count++;
}
else {
int num = (int)log10(count) + index;
index = num;
while (count) {
str[num--] = count % 10 +'0';
count /= 10;
}
str[++index] = S[i];
count = 1;
++index;
}
}
if (index >= size + 1) return S;
return str;
}
运行效率如下所示:
第8题:丑数
试题要求如下:
回答(C语言):
bool isUgly(int num){
if(num==0)
return 0;
while(num%2==0)
num=num/2;
while(num%3==0)
num=num/3;
while(num%5==0)
num=num/5;
return num==1;
}
运行效率如下所示:
第9题:有效的字母异位词
试题要求如下:
回答(C语言):
解题思路:先判断两字符串长度是否相等,若不相等则false,若相等则将两字符串中每种字母的个数做差,若结果为0则true,不为0则false。
bool isAnagram(char * s, char * t){
int n=strlen(s),m=strlen(t);
if(n!=m)
return false;
int a[26]={0};
for(int i=0;i<n;i++){
a[s[i]-'a']++;
a[t[i]-'a']--;
}
for(int i=0;i<26;i++)
if(a[i]!=0)
return false;
return true;
}
运行效率如下所示:
第10题:各位相加
试题要求如下:
回答(C语言):
int addDigits(int num){
int res=0;
while(num>=10){
while(num){
res=res+num%10;
num/=10;
}
num=res;
res=0;
}
return num;
}
运行效率如下所示: