当前位置: 首页 > news >正文

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

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;}
};

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • leetcode 贪心专题——java实现
  • Weblogic 漏洞
  • 【Python系列】Poetry使用指南
  • Excel第33享:借助易用宝将多个表格合并到一个表格
  • 【leetcode】相同的树、另一棵树的子树、翻转二叉树(利用深度优先遍历)
  • 用Babylon.js 滑动屏幕画图形,签字等
  • [云原生]三、Kubernetes(1.18)
  • 论文阅读:Most Probable Densest Subgraphs
  • 二手车交易系统开发设计源码及功能解析
  • M21170G-12
  • Unity射击游戏开发教程:(31)制造一定追踪行为的敌人
  • 使用QNetworkAccessManager实现FTP上传下载功能
  • 反序列化靶机实战serial(保姆级教程)
  • jupyter for c++
  • java进阶 CompletableFuture
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • Android系统模拟器绘制实现概述
  • GitUp, 你不可错过的秀外慧中的git工具
  • IOS评论框不贴底(ios12新bug)
  • Java 网络编程(2):UDP 的使用
  • jquery ajax学习笔记
  • Koa2 之文件上传下载
  • LeetCode18.四数之和 JavaScript
  • nodejs:开发并发布一个nodejs包
  • Python利用正则抓取网页内容保存到本地
  • 创建一个Struts2项目maven 方式
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 电商搜索引擎的架构设计和性能优化
  • 悄悄地说一个bug
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 学习使用ExpressJS 4.0中的新Router
  • 走向全栈之MongoDB的使用
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • #if #elif #endif
  • (2)(2.10) LTM telemetry
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)计算机毕业设计ssm电影分享网站
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (生成器)yield与(迭代器)generator
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net Stream篇(六)
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net 中的反射(动态创建类型实例) - Part.4(转自http://www.tracefact.net/CLR-and-Framework/Reflection-Part4.aspx)...
  • .NET中两种OCR方式对比
  • .net中生成excel后调整宽度
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [].slice.call()将类数组转化为真正的数组