​LeetCode解法汇总2698. 求一个整数的惩罚数

news/2024/7/1 3:06:43

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

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

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

  • 1 <= i <= n
  • i * i 的十进制表示的字符串可以分割成若干连续子字符串,且这些子字符串对应的整数值之和等于 i 。

示例 1:

输入:n = 10
输出:182
解释:总共有 3 个整数 i 满足要求:
- 1 ,因为 1 * 1 = 1
- 9 ,因为 9 * 9 = 81 ,且 81 可以分割成 8 + 1 。
- 10 ,因为 10 * 10 = 100 ,且 100 可以分割成 10 + 0 。
因此,10 的惩罚数为 1 + 81 + 100 = 182

示例 2:

输入:n = 37
输出:1478
解释:总共有 4 个整数 i 满足要求:
- 1 ,因为 1 * 1 = 1
- 9 ,因为 9 * 9 = 81 ,且 81 可以分割成 8 + 1 。
- 10 ,因为 10 * 10 = 100 ,且 100 可以分割成 10 + 0 。
- 36 ,因为 36 * 36 = 1296 ,且 1296 可以分割成 1 + 29 + 6 。
因此,37 的惩罚数为 1 + 81 + 100 + 1296 = 1478

提示:

  • 1 <= n <= 1000

解题思路:

首先,我们需要一个方法来的判断是否是惩罚数。

构造这个方法的时候,我们可以做成递归的方法,输入值为数组转换过后的字符串,当前位置,累加和,目标值。

终点为当前位置大约等于字符串的长度,如果当前位置等于字符串的长度并且累加和等于目标值,则返回true。

否则继续下一轮递归

代码:

class Solution {
public:
    bool dfs(string &s, int pos, int tot, int target) {
        if (pos == s.size()) {
            return tot == target;
        } 
        int sum = 0;
        int times = 0;
        for (int i = pos; i < s.size(); i++) {
            if(times++>3){
                break;
            }
            sum = sum * 10 + s[i] - '0';
            if (sum + tot > target) {
                break;
            }
            if (dfs(s, i + 1, sum + tot, target)) {
                return true;
            }
        }
        return false;
    }
    
    int punishmentNumber(int n) {
        int res = 0;
        for (int i = 1; i <= n; i++) {
            string s = to_string(i * i);
            if (dfs(s, 0, 0, i)) {
                res += i * i;
            }
        }
        return res;
    }
};


http://lihuaxi.xjx100.cn/news/1717115.html

相关文章

Kafka - 消息队列的两种模式

文章目录 消息队列的两种模式点对点模式&#xff08;Point-to-Point&#xff0c;P2P&#xff09;发布/订阅模式&#xff08;Publish/Subscribe&#xff0c;Pub/Sub&#xff09; 小结 消息队列的两种模式 消息队列确实可以根据消息传递的模式分为 点对点模式发布/订阅模式 这两…

离谱!面试为啥都问Kafka?赶紧补一下

目录 一、理解Kafka集成模式1.1 什么是Kafka&#xff1f;1.2 以下是Kafka的关键概念&#xff1a; 二、为什么需要批处理和流处理&#xff1f;三、Kafka主题分区策略3.1 默认分区策略3.2 自定义分区策略3.3 最佳实践&#xff1a;如何选择分区策略 四、批处理与流处理简介4.1 批处…

【UE】UMG通信的三种方法

目录 前言 方法一&#xff1a;通过“获取类的所有控件”节点通信 方法二&#xff1a;当创建控件蓝图时传入其它控件蓝图的对象引用 *方法三&#xff1a;使用HUD类来管理UMG通信 前言 首先我们创建了三个控件蓝图&#xff0c;那么其中的一个控件蓝图如何与剩下的控件蓝图通…

BadNets:基于数据投毒的模型后门攻击代码(Pytorch)以MNIST为例

加载数据集 # 载入MNIST训练集和测试集 transform transforms.Compose([transforms.ToTensor(),]) train_loader datasets.MNIST(rootdata,transformtransform,trainTrue,downloadTrue) test_loader datasets.MNIST(rootdata,transformtransform,trainFalse) # 可视化样本 …

Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (三)

这是继之前文章&#xff1a; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;一&#xff09; Elasticsearch&#xff1a;使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation &#xff08;二&…

Docker 启动远程服务访问不了

今天一下午在弄这个 1、防火墙是否关了 firewall-cmd --state2、ip转发开没开 sysctl net.ipv4.ip_forward3、service iptables是不是打开并拦截了 4、检查docker启动的端口号是否一致&#xff0c;或者启动时对不对 5、检查docker的服务是否起来了&#xff0c;比如你的端口号…

【Java】泛型擦除机制

擦除机制&#xff1a;将一个List集合 泛型 赋值给一个没有使用到泛型List集合&#xff0c;直接去除泛型 示例代码 package com.collection.Demo06;import java.util.ArrayList; import java.util.List;/*** 泛型擦除机制*/ public class Test06 {public static void main(Stri…

怎么禁止U盘拷贝电脑资料

怎么禁止U盘拷贝电脑资料 现如今U盘已经成为了人们日常传输文件的主要方式之一&#xff0c;U盘在给我们提供便利的同时&#xff0c;也带来了一些安全隐患&#xff0c;比如U盘可以轻松地复制电脑文件&#xff0c;这可能会导致机密信息泄露。因此&#xff0c;本文将介绍一些方法…