classSolution{public:// 取数值各个位上的单数之和intgetSum(int n){int sum =0;while(n){
sum +=(n %10)*(n %10);
n /=10;}return sum;}boolisHappy(int n){
unordered_set<int> set;while(1){int sum =getSum(n);if(sum ==1){returntrue;}// 如果这个sum曾经出现过,说明已经陷入了无限循环了,立刻return falseif(set.find(sum)!= set.end()){returnfalse;}else{
set.insert(sum);}
n = sum;}}};
4. 1. 两数之和
classSolution{public:
vector<int>twoSum(vector<int>& nums,int target){
std::unordered_map <int,int> map;for(int i =0; i < nums.size(); i++){// 遍历当前元素,并在map中寻找是否有匹配的keyauto iter = map.find(target - nums[i]);if(iter != map.end()){return{iter->second, i};}// 如果没找到匹配对,就把访问过的元素和下标加入到map中
map.insert(pair<int,int>(nums[i], i));}return{};}};