目录
第1题:剪绳子1
第2题:Excel表列序号
第3题:阶乘后的零
第4题:位1的个数
第5题:快乐数
第6题:颠倒二进制
第7题:字符串压缩
第8题:丑数
第9题:有效的字母异位词
第10题:各位相加
力扣(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。
b
ool 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; }
运行效率如下所示: