2023-10-25 LeetCode每日一题(求一个整数的惩罚数)

2023-10-25每日一题

一、题目编号

2698. 求一个整数的惩罚数

二、题目链接

点击跳转到题目位置

三、题目描述

给你一个正整数 n ,请你返回 n 的 惩罚数 。

n 的 惩罚数 定义为所有满足以下条件 i 的数的平方和:

  • 1 <= i <= n
  • i * i 的十进制表示的字符串可以分割成若干连续子字符串,且这些子字符串对应的整数值之和等于 i 。
    示例 1:
    2023-10-25 LeetCode每日一题(求一个整数的惩罚数)_第1张图片

示例 2:
2023-10-25 LeetCode每日一题(求一个整数的惩罚数)_第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) 模拟即可。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)