0%

220213刷题

202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n快乐数 就返回 true ;不是,则返回 false

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:

输入:n = 2
输出:false

提示:

  • 1 <= n <= 231 - 1

C++

  • set判断循环,无限次默认100(可增加)
class Solution {
public:
bool isHappy(int n) {
if(n <= 10) return (n == 1|| n ==10 || n == 7);
unordered_set<int> st;
int temp = 0, cnt = 100; // 次数
while(cnt -- > 0){
temp = 0;
while(n){
temp += pow(n%10, 2);
n /= 10;
}
if(temp == 1) return true;
else if(st.find(temp) == st.end()){
st.insert(temp);
n = temp;
}
else return false;
}
return false;
}
};

166. 分数到小数

给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数

如果小数部分为循环小数,则将循环的部分括在括号内。

如果存在多个答案,只需返回 任意一个

对于所有给定的输入,保证 答案字符串的长度小于 104

示例 1:

输入:numerator = 1, denominator = 2
输出:"0.5"

示例 2:

输入:numerator = 2, denominator = 1
输出:"2"

示例 3:

输入:numerator = 4, denominator = 333
输出:"0.(012)"

提示:

  • -231 <= numerator, denominator <= 231 - 1
  • denominator != 0

C++

class Solution {
public:
string fractionToDecimal(int numerator, int denominator) {
long n = numerator, d = denominator;
if(n % d == 0) return to_string(n / d);

string res = "";
if(n * d < 0) res += '-';
n = abs(n), d = abs(d);
res += to_string(n / d) + '.';
n %= d;

unordered_map<int ,int> mp;
int len = res.size();
while(n && !mp.count(n)){
mp[n] = len ++;
n *= 10;
res += to_string(n/d);
n %= d;
}

if(n) res = res.substr(0, mp[n]) + '(' + res.substr(mp[n]) + ')';
return res;
}
};