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

ops/2024/9/23 7:32:36/

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 num2if((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.ppmy.cn/ops/89200.html

相关文章

Langchain核心模块与实战[9]:RAG检索增强生成[文本向量化、实战ChatDoc智能文档助手]

Langchain核心模块与实战[9]:RAG检索增强生成[文本向量化、实战ChatDoc智能文档助手] 参考文章可以使用国产LLM进行下述项目复现: 初识langchain[1]:Langchain实战教学,利用qwen2.1与GLM-4大模型构建智能解决方案[含Agent、tavily面向AI搜索]langchain[2]:Langchain实战教…

spring注解:@Transactional使用简介

Transactional 是 Spring 框架提供的声明式事务管理的一个核心注解&#xff0c;主要用于对方法进行事务管理。它能够确保方法在执行过程中的多个操作要么全部成功&#xff0c;要么全部失败。这种事务管理方式可以简化开发人员编写事务管理代码的工作量&#xff0c;提高开发效率…

显示学习5(基于树莓派Pico) -- 彩色LCD的驱动

和这篇也算是姊妹篇&#xff0c;只是一个侧重SPI协议&#xff0c;一个侧重显示驱动。 总线学习3--SPI-CSDN博客 驱动来自&#xff1a;https://github.com/boochow/MicroPython-ST7735 所以这里主要还是学习。 代码Init def __init__( self, spi, aDC, aReset, aCS) :"&…

vue在Index.html中自定义全局变量

在inde.html定义整个项目都能访问的变量,用于判断等等 直接在 index.html中 js <script>window.VUE_APP_NODE_ENV <% process.env.NODE_ENV %>;</script> 我这里是 赋值了 环境值. 可以改变任意值都行. 要用的地方直接判断就行 if (VUE_APP_NODE_ENV…

面试经典算法150题系列-跳跃游戏||

跳跃游戏|| 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 num…

MyBatis 如何通过拦截器修改 SQL

目录 1. 实现Interceptor接口2. 注册配置文件 假如我们想实现多租户&#xff0c;或者在某些 SQL 后面自动拼接查询条件。在开发过程中大部分场景可能都是一个查询写一个 SQL 去处理&#xff0c;我们如果想修改最终 SQL 可以通过修改各个 mapper.xml 中的 SQL 来处理。 但实际过…

WebKit简介及工作流程

引言 随着互联网的飞速发展&#xff0c;浏览器作为用户访问网络世界的门户&#xff0c;其性能和稳定性日益成为关注的焦点。在众多浏览器引擎中&#xff0c;WebKit以其卓越的渲染性能和跨平台特性&#xff0c;赢得了广泛赞誉。作为前端技术专家&#xff0c;深入了解WebKit的架…

C语言 | Leetcode C语言题解之第318题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; int maxProduct(char ** words, int wordsSize){int masks[wordsSize];memset(masks, 0, sizeof(masks));for(int i 0; i < wordsSize; i) {int len strlen(words[i]);for(int j 0; j < len; j) {masks[i] | 1 << (words[i]…