目錄
力扣(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;
}
運行效率如下所示: