零、写在前面
这是打卡的第十九天,今天题目比较简单,就是题量巨大,,主要知识点在
《算法零基础100讲》(第19讲) 进制转换(一) - 入门https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977
https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977
一、主要知识点
1.十进制转7进制
其实主要方法就是除留余数法则。
while(n){ ans += n % k; //取余数 n /= k; //除k }
二、课后习题
剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数
https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/
主要思想
按照位运算,从1到32位进行扫描就好了。
int hammingWeight(uint32_t n) { int count = 0; for(int i = 0;i < 32;i++) //位移统计1个数 if(n & ((uint32_t)1 << i)) count++; //1要转换类型 不然默认位int会溢出 return count; }
结果分析
结果还是极好的
258. 各位相加
258. 各位相加
https://leetcode-cn.com/problems/add-digits/
主要思想
利用除留余数法得到10进制的各个和,反复执行直到小于10就好了。
int addDigits(int num){ int ans = num; //结果 while(ans/10){ //和ans < 10没有本质区别 num = ans; //num赋值位之前的结果 ans = 0; //ans初始化 while(num){ //统计num中各位和 ans += num % 10; num /= 10; } } return ans; }
结果分析
凑合,还行。
1290. 二进制链表转整数
1290. 二进制链表转整数
https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer/
主要思想
每次乘2做加法就好了,有点像2分快速幂的感觉。代码不难,直接看吧。
int getDecimalValue(struct ListNode* head){ int sum = 0; for( ; head; head = head -> next){ //遍历链表 sum += head-> val; //加入此节点 sum *= 2; //作位移 } return sum / 2; //其实先做位移就不需要这个了,期待你们优化 }
结果分析
还行吧。
1837. K 进制表示下的各位数字总和
1837. K 进制表示下的各位数字总和
https://leetcode-cn.com/problems/sum-of-digits-in-base-k/
主要思想
和上面的某道题没啥区别。
int sumBase(int n, int k){ int ans = 0; while(n){ //除留余数法 ans += n % k; n /= k; } return ans; }
结果分析
可以了
1399. 统计最大组的数目
1399. 统计最大组的数目
https://leetcode-cn.com/problems/count-largest-group/
主要思想
利用hash表存储所有和的值对应元素个数,顺带统计最大值,返回就好了
int countLargestGroup(int n){ int f[37] = {0},max=0; //记录最大值、记录相应和的数目hash表 for(int i = 1;i <= n; i++){ //从1到n做统计 int count = 0,temp = i; //统计个数初始化 while(temp){ //除留余数法 count += temp%10; temp /= 10; } f[count]++; //相应的值+1 if(f[count] > max) max = f[count];//更新max值 } int ans = 0; //判断最终的答案 for(int i = 0;i < 37;i++){ if(f[i] == max) ans++; //看看等于max的有几个 } return ans; }
结果分析
简洁,完美