今天继续做题
刷题【D2】
LC202 快乐数
首先需要写一个函数来计算每一位的和。
在判断快乐数的时候可以用双指针的方法,用快慢指针来解决循环中的追及问题。
class Solution {
public:
int getSum(int n){
int sum=0;
while(n){
int temp=n%10;
sum+=temp*temp;
n=n/10;
}
return sum;
}
bool isHappy(int n) {
int slow=n, fast=n;
slow=getSum(slow);
fast=getSum(fast);
fast=getSum(fast);
while(slow!=fast){
slow=getSum(slow);
fast=getSum(fast);
fast=getSum(fast);
}
if(slow==1 || fast==1){
return true;
}
return false;
}
};
也可以用哈希表来记录位数和是否出现过。
class Solution {
public:
int getSum(int n){
int sum=0;
while(n){
int temp=n%10;
sum+=temp*temp;
n=n/10;
}
return sum;
}
bool isHappy(int n) {
unordered_map<int,int> umap;
while(1){
int temp=getSum(n);
if(temp==1){
return true;
}
if(umap.count(temp)==0){
umap[temp]++;
}else{
return false;
}
n=temp;
}
}
};
LC1 两数之和
没啥好说的,用哈希表来解决吧。先检查当前数字是否有符合要求的补数(是叫这个吗…忘记了,反正就是当前为x,检查target-x是否已经被记录)。然后分别记录数字和对应的index。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> umap;
vector<int> ans;
for(int i=0;i<nums.size();i++){
if(umap.count(target-nums[i])){
ans.push_back(i);
ans.push_back(umap[target-nums[i]]);
}
umap[nums[i]]=i;
}
return ans;
}
};