2023-10-25每日一题
一、题目编号
2698. 求一个整数的惩罚数
二、题目链接
点击跳转到题目位置
三、题目描述
给你一个正整数 n ,请你返回 n 的 惩罚数 。
n 的 惩罚数 定义为所有满足以下条件 i 的数的平方和:
- 1 <= i <= n
- i * i 的十进制表示的字符串可以分割成若干连续子字符串,且这些子字符串对应的整数值之和等于 i 。
示例 1:
示例 2:
提示:
- 1 <= n <= 1000
四、解题代码
class Solution {
bool judge(int num, int target){
if(num == target){
return true;
}
string s = to_string(num);
string t = to_string(num);
int tmp = 0;
int n = s.size();
int yz = 1;
for(int i = n-1; i >= 0; --i){
tmp += (yz * (s[i] - '0'));
if(tmp > target){
return false;
}
t.pop_back();
if(t.size() == 0 ){
if(tmp != target){
return false;
} else{
return true;
}
}
int num1 = stoi(t);
int target1 = target - tmp;
if(judge(num1, target1) == true){
return true;
}
yz *= 10;
}
return false;
}
public:
int punishmentNumber(int n) {
int res = 0;
for(int i = 1; i <= n; ++i){
int num = i * i;
if(judge(num , i) == true){
res += num;
}
}
return res;
}
};
五、解题思路
(1) 模拟即可。