例题1
题目描述:
- 解题思路:
比较基础,取余和除法的使用
- 参考代码:
nt hammingWeight(uint32_t n) { int i,cnt=0; while(n) { if(n%2==1) cnt++; n/=2; } return cnt; }
例题2
题目描述:
解题思路:
对于一般来说使用循环便可以解决
如果是进阶来说,便需要一点数学思想:
这里我们让一个三位数表示成xyz,那么就有x*100+y*10+z=x*99+y*9+x+y+z
要得到x+y+z则整体%9
这个题得到的结果一定为0-9,如果%9的话结果为0-8,那么先拆出一个1再加上1:
(x*99+y*9+x+y+z+1-1)%9=(x+y+z-1)%9+1%9=(x+y+z-1)%9+1
参考代码:
int addDigits(int num){ return (num-1)%9+1; }
例题3
题目描述:
- 解题思路:
链表的遍历+进制的思想
- 参考代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ int getDecimalValue(struct ListNode* head){ int ret=0; struct ListNode*cur=head; while(cur) { ret=ret*2+cur->val; cur=cur->next; } return ret; }
例题4
题目描述:
- 解题思路:
进制转换+各数求和(取余和除法)
- 参考代码:
int sumBase(int n, int k){ int ret=0; while(n) { ret=ret*10+n%k; n/=k; }//得到的数是反过来的,不过并不碍事 int ans=0; while(ret)//简单求各位数和 { ans+=ret%10; ret/=10; } return ans; }
例题5
题目描述:
- 解题思路:
对于各数和的数用标记数组记录,同时记录最大个数,再遍历计数
- 参考代码:
int countLargestGroup(int n){ int book[50]={0};//标记各数和数组(各数和有范围) int max=0;//记录最大个个数 int i; for(i=1;i<=n;i++) { int sum=0; int tmp=i; while(tmp)//各数和 { sum+=tmp%10; tmp/=10; } book[sum]++;//标记和的个数 if(book[sum]>max)//标记最大 max=book[sum]; } int cnt=0;//遍历计数 for(i=1;i<50;i++) { if(book[i]==max) cnt++; } return cnt; }
例题6
题目描述:
- 解题思路:
算法学习中已经讲解过了
- 参考代码:
char * convertToBase7(int num){ char*ret=(char*)malloc(sizeof(char)*20); int stack[20]={0},top=0;//数组栈 int retsize=0; if(num<0)//正负号 { ret[retsize++]='-'; num=-num; } if(num==0)//特殊情况 { return "0"; } else { while(num)//反向储存进制数 { stack[top++]=num%7; num/=7; } } while(top--) { ret[retsize++]=stack[top]+'0';//反向转化 } ret[retsize]='\0';//结束符 return ret; }
例题7
题目描述:
- 解题思路:
再上题基础上再变化一下就可以了
- 参考代码:
char * toHex(int num){ char*ret=(char*)malloc(sizeof(char)*20); int stack[20]={0},top=0;//数组栈 int retsize=0; unsigned int n=num;//补码运算 if(n==0)//特殊情况 { return "0"; } else { while(n)//反向储存进制数 { stack[top++]=n%16; n/=16; } } while(top--) { if(stack[top]>=10) { ret[retsize++]=stack[top]-10+'a'; } else { ret[retsize++]=stack[top]+'0';//反向转化 } } ret[retsize]='\0';//结束符 return ret; }