傳送門:力扣
所學知識:
1.求和程序,去數值的單數操作,使用while(n)來操作,很強,
int getSum(int n) {
int sum = 0;
while (n) {
sum += (n % 10) * (n % 10);
n /= 10;
}
return sum;
}
2.通過unordered_set哈希容器來檢測是否進入無限回圈中,
if(set.find(sum)!=end()){
return false;
}
而且哈希容器所需要的記憶體空間比陣列要高,所以并不是所有題目都無腦使用哈希容器
代碼:
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<unordered_set>
using namespace std;
class Solution {
public:
// 取數值各個位上的單數之和
int getSum(int n) {
int sum = 0;
while (n) {
sum += (n % 10) * (n % 10);
n /= 10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> set;
while (1) {
int sum = getSum(n);
if (sum == 1) {
return true;
}
// 如果這個sum曾經出現過,說明已經陷入了無限回圈了,立刻return false
if (set.find(sum) != set.end()) {
return false;
}
else {
set.insert(sum);
}
n = sum;
}
}
};
int main() {
Solution solution;
cout << solution.isHappy(19) << endl;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389079.html
標籤:其他
上一篇:初來乍到,寫自己的博客
