8.3 字符串中等 306 Additive Number 423 Reconstruct Original Digits from English

news2025/2/25 1:54:39

306 Additive Number

在这里插入图片描述

//累加数:除了前两个数,其余数都等于前两个加起来,至少包括三个数
//难点找到前两个数
//条件1:至少包括三个数–>确定前两个数字的最大长度 len = n/3 × 看下方注意1
//条件2:遇到0默认归属于他前面那个数字-------------》用于排除一些错误搭配isValid中的第一个条件语句
//主体:先分段再遍历-----------》先确定前两个数,再得到和 ,再进行比较
//难点:尝试所有可能的分段组合:分别尝试每种可能的前两个数字的长度组合,检查是否满足累加数的条件。

【默写】
注意1:确定前两个数字的长度,如果是123+1 = 124的情况,按照原思路:n = 7 n/3 = 2 但很明显是片面的。所以按照下方思路来:【积累】

在这里插入图片描述
注意2:题目中num.length 最大35 所以承载n1 n2两个数使用longlong类型。
在这里插入图片描述

class Solution {
public:
    bool isValid(const string& num , int len1 ,int len2){
        //条件2: 0不做开头 for num1 num2
        if((num[0] == '0' && len1 > 1 )|| (num[len1] == '0' && len2 > 1)){
            return false;
        }
        string num1 = num.substr(0, len1);
        string num2 = num.substr(len1,len2);
        string sum;
        //num最大长度35 所以int不得行
        long long n1 = stoll(num1) , n2 = stoll(num2);
        
        for(int start = len1+len2 ; start != num.size() ; start+=sum.size()){
            //斐波那契数列
            n2 = n1+n2;
            n1 = n2-n1;
            sum = to_string(n2);
            if((start + sum.size() > num.size())||(num.substr(start , sum.size())!=sum)){
                return false;
            }
        }
        return true;
    }
    bool isAdditiveNumber(string num) {
        int n = num.size();
        //条件1:确定前两个数的长度
        for(int i = 1 ; i <= n/2 ; i++){
            for(int j = 1 ; j <= (n-i)/2 ; j++){
                if(isValid(num , i , j)){
                    return true;
                }
            }
        }
        return false;
    }
};

c++代码学习

string.substr(start,length);
取的是string中从start位置开始长度为length的子字符串。

423 Reconstruct Original Digits from English

在这里插入图片描述
读题:打乱顺序的字母串—>建立字母表,s is valid—>s刚好可以被全部用完,res需要按顺序输出数字
难点:找到每个数字对应的个数并顺序输出 —>核心还是思考s is valid—>s刚好可以被全部用完这个条件。
【原思路】建立字母表,顺序遍历0-9的字母表示,并保证第一个字母是该数字与其他数字的不同(但肯定会有重复的 one nine 就重复了两个字母),最后依次遍历下方这个num pair<string ,char>数组,找到每个数字的英文字母出现的最低频率min,按顺序append到res。
【规范思路】建立字母表,按下方思路建立<string,char>,很明显,按照下方顺序就不能顺序输出数字了,所以多增加一个Digitcount(10,0)用于记录每个数字的min值。主体:确定字母表内容,先遍历num pair数组确定min值输入到digitcount中,最后再遍历一遍digitcount并将数字顺序append到res字符串中。
太乱的话,看最下面的图片。
在这里插入图片描述

class Solution {
public:
    string originalDigits(string s) {
        vector<pair<string, char>> num = {
            {"zero", '0'}, {"two", '2'}, {"four", '4'}, {"six", '6'}, {"eight", '8'}, 
            {"one", '1'}, {"three", '3'}, {"five", '5'}, {"seven", '7'}, {"nine", '9'}
        };
        vector<int> count(26, 0);
        vector<int> digitCount(10, 0);
        
        // 字母表的创建
        for (char ch : s) {
            count[ch - 'a']++;
        }
        
        // 遍历特殊标记数字的字母,确保数字顺序正确
        for (const auto &p : num) {
            string n = p.first;
            int min = INT_MAX;
            for (char ch : n) {
                min = min < count[ch - 'a'] ? min : count[ch - 'a'];
            }
            // 更新每个数字的出现次数
            digitCount[p.second - '0'] = min;
            // 更新 count 数组
            for (char ch : n) {
                count[ch - 'a'] -= min;
            }
        }
        
        string res = "";
        for (int i = 0; i < 10; ++i) {
            res.append(digitCount[i], '0' + i);
        }
        
        return res;
    }
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axure RP界面设计初探:基础操作与实用技巧

Axure RP是目前流行的设计精美的用户界面和交互软件。Axure RP提供了一组丰富的RP。 UI 控件&#xff0c;这些控件根据它们的应用领域进行分类。作为Axure的国产替代品&#xff0c;它可以在线协同工作&#xff0c;浏览器可以在不下载客户端的情况下立即打开和使用。如果以前用A…

护眼灯到底有没有用?一文曝光护眼灯的三大好处!

护眼台灯进入大众的视野&#xff0c;但种类多样&#xff0c;其质量也是参差不齐。不少人一直有着”护眼灯到底有没有用&#xff1f;“质疑&#xff0c;作为学生&#xff0c;课业多且繁重&#xff0c;再加上电子设备普遍普及&#xff0c;眼睛受承受的压力日渐增大。因此&#xf…

如何快速实现MODBUS TCP转Profinet——泗博网关EPN-330

泗博网关EPN-330可作为PROFINET从站&#xff0c;支持与西门子S7-200 SMART/300/400/1200/1500全系列PLC以及具有PROFINET主站的系统无缝对接&#xff0c;而Modbus TCP端&#xff0c;可以与Modbus TCP从站设备、主站PLC、DCS系统以及组态软件等进行数据交互。 通过EPN-330&…

【算法设计题】编写算法,统计带头节点的单链表L的实际元素个数,第5题(C/C++)

目录 第5题 统计带头节点的单链表L的实际元素个数 得分点&#xff08;必背&#xff09; 题解&#xff1a;统计带头节点的单链表L的实际元素个数 代码解答 详细解释 举例说明 &#x1f308; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30c; 2024&#xff0c;每日百…

第二证券:沪指涨0.31%,电力、煤炭等板块拉升,卫星导航概念活跃

7日早盘&#xff0c;沪指盘中发力上扬&#xff0c;深证成指、创业板指震荡翻绿&#xff0c;场内超2700只个股飘绿。 到午间收盘&#xff0c;沪指涨0.31%报2876.17点&#xff0c;深证成指跌0.04%&#xff0c;创业板指跌0.16%&#xff0c;上证50指数涨0.34%&#xff0c;两市算计…

Leetcode每日刷题之字符串相加(C++)

在学习的同时也不要忘记适当练习&#xff0c;本题字符串相加主要在于字符串类型与整数类型的转化&#xff0c;要将字符串类型转化为整数类型计算后转化为字符串类型输出即可。 思路解析 根据题中给出的信息&#xff0c;我们不可以使用库函数计算大整数&#xff0c;也不能直接将…

代码随想录算法训练营第四天(二)|面试题 02.07. 链表相交 142.环形链表II

面试题 02.07. 链表相交 题目&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环…

视频号直播回放怎么下载?

一、如果是下载自己直播回放视频&#xff1a; 方法一&#xff1a;视频号助手 打开网址&#xff1a;视频号助手 登陆账号后。下面路径&#xff0c;先点击成回放&#xff0c; 后就可以在下面路径&#xff0c;下载全场回放 但是这种有个缺点&#xff0c;就是不能分段下载。这样…

C语言----计算开机时间

计算开机时间 实例说明 编程实现计算开机时间&#xff0c;要求在每次开始计算开机时间时都能接着上次记录的结果向下记录。 实现过程&#xff1a; 1. 在TC中创建一个C文件。 2. 引用头文件&#xff0c;代码如下: #include <stdio.h> 3. 定义结构体time&#xff0c;用来…

AI绘画 | Stable Diffusion后期处理—无需ControlNet也能轻松高清放大图像与老旧照片修复,SD新手必看教程

大家好&#xff0c;我是画画的小强 分享了这么多期AI绘画Stable DIffusion的入门教程和一些常用的插件玩法后&#xff0c;不知道大家有没有发现&#xff0c;SD还有一个功能&#xff0c;似乎没怎么用到过&#xff0c;它就是—后期处理。 今天就给大家分享一下SD中的 “后期处理…

python 空list如何表示

创建空列表&#xff1a; L List() 或者&#xff1a; L [] 这时L就是一个空列表。 需要注意的是&#xff0c;空列表不是None&#xff0c;因此 L [] If L is not None:# 这里的代码总是会被执行 检查列表是否为空要使用len()&#xff1a; L [] if len(L):# 这里的代码不会执…

单词拆分——LeetCode

139.单词拆分 题目 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用 示例 1&#xff1a; 输入: s &qu…

idea使用free流程,2024idea免费使用

1.先到官网下载&#xff0c;这里选择win系统的&#xff0c;点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好&#xff0c;安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…

AD域服务器中的用户和计算机管理面板中的账户显示异常

如果发现新建用户时在用户和计算机管理面板中发现显示的用户名不是预期中的效果&#xff0c;可以检查用户的完整DN&#xff0c;其中DN中的CN的值决定了你在用户和计算机管理面板中显示的内容是什么。 &#xff08;由于本人使用Python代码完成新建AD域账号时&#xff0c;发现新…

leetcode-27-移除元素

原理&#xff1a; 1、统计数组nums中出现val的次数n&#xff1b; 2、利用循环进行n次删除nums中的val; 3、返回nums的长度 代码&#xff1a;

你的Java项目还在等待吗?快来学会线程池,解放你的性能!

文章目录 你的Java项目还在等待吗&#xff1f;快来学会线程池&#xff0c;解放你的性能&#xff01;1 什么是线程池&#xff1f;为什么需要它&#xff1f;2 线程池的参数有哪些&#xff1f;3 不同类型的线程池有哪些配置&#xff1f; 你的Java项目还在等待吗&#xff1f;快来学…

ctfhub文件包含

文件包含 url http://challenge-41cbfbe04828b338.sandbox.ctfhub.com:10800/ 构造url&#xff0c;利用hackabar进行Post data修改测试 http://challenge-41cbfbe04828b338.sandbox.ctfhub.com:10800/?fileshell.txt ctfhubsystem("ls"); ctfhubsystem("ls…

【漏洞复现】常见框架漏洞复现 合集

Web框架(Web framework)或者叫做Web应用框架(Web application framework)&#xff0c;是用于进行Web开发的一套软件架构。大多数的Web框架提供了一套开发和部署网站的方式。为Web的行为提供了一套支持支持的方法。使用Web框架&#xff0c;很多的业务逻辑外的功能不需要自己再去…

HexView 刷写文件脚本处理工具-基本功能介绍(三)-导出S19/HEX

菜单 导出(Export) 此项目将一系列不同的选项组合在一起,用于将内部数据存储为不同的文件格式。每种导出都可以包含一些选项,以调整输出信息。 导出为S-Record格式(Export as S-Record) Motorola S-Record格式导出数据。 记录类型将根据最高地址信息的长度自动选择。…

Android平台如何不推RTMP|不发布RTSP流|不实时录像|不回传GB28181数据时实时快照?

技术背景 我们知道&#xff0c;Android平台不管RTMP推送、轻量级RTSP服务模块还是GB28181设备接入模块&#xff0c;早期&#xff0c;如果需要实现截图功能&#xff0c;又不想依赖Android系统接口&#xff0c;最好的办法是&#xff0c;在底层实现快照截图。 快照截图&#xff…