LeetCode(力扣)算法题_2575_找出字符串的可除整数组

找出字符串的可除整数组

题目描述

难度:中等

给你一个下标从 0 开始的字符串 word ,长度为 n ,由从 0 到 9 的数字组成。另给你一个正整数 m 。

word 的 可整除数组 div  是一个长度为 n 的整数数组,并满足:

  • 如果 word[0,...,i] 所表示的 数值 能被 m 整除,div[i] = 1
  • 否则,div[i] = 0

返回 word 的可整除数组。

 

示例 1:

输入:word = "998244353", m = 3
输出:[1,1,0,0,0,1,1,0,0]
解释:仅有 4 个前缀可以被 3 整除:"9"、"99"、"998244" 和 "9982443" 。

示例 2:

输入:word = "1010", m = 10
输出:[0,1,0,1]
解释:仅有 2 个前缀可以被 10 整除:"10" 和 "1010" 。

解题思路

根据题意可知:

        我们需要进行 word.length() 次(字符串长度)的整除计算,根据每一次计算后的结果,生成 word.length() 个 0 或 1 作为输出结果;

        每次遍历的整除计算表示为:

                (a * 10 + (word.charAt(i) - '0')) % m

        其中 a 的初始值为 0 ,word.charAt(i) - '0' 的写法是为了将 word.charAt(i) 的字符转为对应的ASCII码值,在这个题中 word.charAt(i) 的字符是数字,那么 word.charAt(i) - '0' 得到的就是对应的数字;

        此时已经有了一个大概的框架:

class Solution {public int[] divisibilityArray(String word, int m) {int n = word.length();long temp = 0;for(int i = 0;i < n;i++){temp = (temp * 10 + (word.charAt(i) - '0')) % m;}return 0;}
}

        这时候我们只差一个返回的结果,那么加入一个数组,并且长度等于 word.length()。然后再将遍历过程中的计算结果 temp 进行判断(是否被整除),根据判断结果将 0 或 1 存入结果数组中。

class Solution {public int[] divisibilityArray(String word, int m) {int n = word.length();int[] res = new int[n];long temp = 0;for(int i = 0;i < n;i++){temp = (temp * 10 + (word.charAt(i) - '0')) % m;res[i] = (temp == 0) ? 1 : 0 ;}return res;}
}

代码改动

        在第一遍写代码的时候,犯了一些错误,当时的代码如下:

class Solution {public int[] divisibilityArray(String word, int m) {int[] res = new int[word.length()];int temp = 0;for(int i = 0;i < word.length();i++){temp = (temp * 10 + (word.charAt(i) - '0')) % m;if(temp == 0){res[i] = 1;}else{res[i] = 0;}}return res;}
}

错误一:

        temp 使用的是 int 数据类型,这个看起来是没有任何问题的,但是在面临一些 word 较长的测试用例时,数据范围是不够的,所以说需要改为 long。

优化一:

        上述代码读了两次 word.length() 。整体代码运行时长为 9 ms,如果将 word.length() 的值存在内存中在需要时进行调用,可优化代码运行时长,优化后的代码运行时长为 7 ms。

优化二:

        将 if 语句换为条件表达式,这一步优化的时候只是为了简化代码,在这个例子中好像没有起到别的优化作用。

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

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

相关文章

淘宝/天猫API:电商卖家提升销售额的利器

淘宝/天猫API对于电商卖家来说确实是一个提升销售额的利器。通过使用这些API&#xff0c;卖家可以自动化和优化各种业务流程&#xff0c;从而提高销售效率、优化客户体验并增强竞争力。以下是一些建议和示例代码&#xff0c;说明如何利用淘宝/天猫API来提升销售额。 1. 获取商…

从0到1入门C++编程——10 stack容器、queue容器、list容器、set容器、map容器

文章目录 一、stack容器二、queue容器三、list容器1、构造函数2、赋值和交换3、大小及判空4、插入和删除5、数据存取6、反转和排序7、排序案例 四、set/multiset容器1、构造和赋值2、大小和交换3、插入和删除4、查找和统计5、set和multiset的区别6、pair对组的创建7、排序及规则…

边缘计算基础知识

目录 边缘计算简介任务卸载简介边缘存储系统 边缘计算简介 边缘计算是指利用靠近数据生成的网络边缘侧的设备&#xff08;如移动设备、基站、边缘服务器、边缘云等&#xff09;的计算能力和存储能力&#xff0c;使得数据和任务能够就近得到处理和执行。 一个典型的边缘计算系…

泽众云真机-为什么老机型专区大部分是维护中?如何解决

最近&#xff0c;泽众云真机平台有几位用户向我们咨询&#xff0c;为什么老机型专区大部分是维护中&#xff1f;我想使用这些机型怎么办&#xff1f; 首先来解释一下&#xff0c;为什么叫“老机型专区”&#xff1f;因为一些老的机型之前一直是在线状态&#xff0c;通过我们长期…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Checkbox)

提供多选框组件&#xff0c;通常用于某选项的打开或关闭。 说明&#xff1a; API version 11开始&#xff0c;Checkbox默认样式由圆角方形变为圆形。 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 无 接口…

Hello C++ (c++是什么/c++怎么学/c++推荐书籍)

引言 其实C基础语法基本上已经学完&#xff0c;早就想开始写C的博客了&#xff0c;却因为其他各种事情一直没开始。原计划是想讲Linux系统虚拟机安装的&#xff0c;后来考虑了一下还是算了&#xff0c;等Linux学到一定程度再开始相关博客的写作和发表吧。今天写博客想给C开个头…

解决:ModuleNotFoundError: No module named ‘paddle‘

错误显示&#xff1a; 原因&#xff1a; 环境中没有‘paddle’的python模块&#xff0c;但是您在尝试导入 解决方法&#xff1a; 1.普通方式安装&#xff1a; pip install paddlepaddle #安装命令 2.镜像源安装 pip install paddlepaddle -i https://pypi.tuna.tsinghua.e…

饮料换购 刷题笔记

直接开个计数器mask 每当饮料现存数-1&#xff1b; cnt;且mask; 一旦mask达到3 饮料现存数 计数器清零3 代码 #include <iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int main(){ int n; …

【论文整理】自动驾驶场景中Collaborative Methods多智能体协同感知文章创新点整理

Collaborative Methods F-CooperV2VNetWhen2commDiscoNetAttFusionV2X-ViTCRCNetCoBERTWhere2commDouble-MCoCa3D 这篇文章主要想整理一下&#xff0c;根据时间顺序这些文章是怎么说明自己的创新点的&#xff0c;又是怎么说明自己的文章比别的文章优越的。显然似乎很多文章只是…

网络编程:数据库实现增删改

1.数据库实现增删改 程序代码&#xff1a; 1 #include<myhead.h>2 //定义添加数据函数3 int do_add(sqlite3*ppDb)4 {5 //准备sql语句6 int add_numb;//工号7 char add_name[20];//姓名8 double add_salary;9 printf("请输入要添加的工号:&quo…

18-Java迭代器模式 ( Iterator Pattern )

Java迭代器模式 摘要实现范例 迭代器模式&#xff08;Iterator Pattern&#xff09;用于顺序访问集合对象的元素&#xff0c;不需要知道集合对象的底层表示 迭代器模式是 Java 和 .Net 编程环境中非常常用的设计模式 迭代器模式属于行为型模式 摘要 1. 意图 提供一种方法…

sql server使用逗号,分隔保存多个id的一些查询保存

方案一&#xff0c;前后不附加逗号&#xff1a; 方案二&#xff0c;前后附加逗号&#xff1a; 其他保存方案&#xff1a; &#xff08;这里是我做一个程序的商家日期规则搞得&#xff0c;后面再补具体操作&#xff09;&#xff1a; 1,2,3 | 1,2,3 | 1,2,3; 1,2,3 &#xff1…

Unity性能优化篇(十二) 音频优化之导入音频后的属性设置

Unity支持后缀为.wav、.ogg、.mp3的音频文件&#xff0c;但建议使用.wav&#xff0c;因为Unity对它的支持特别好。 注意&#xff1a;Unity在构建项目时总是会自动重新压缩音频文件&#xff0c;因此无需刻意提前压缩一个音频文件再导入Unity&#xff0c;因为这样只会降低该音频文…

openGauss gsql 常用元命令 二

openGauss gsql 常用元命令 二 \df 查看当前数据库函数信息 openGauss# \df ********* QUERY ********** SELECT n.nspname as "Schema",p.proname as "Name",pg_catalog.pg_get_function_result(p.oid) as "Result data type",pg_catalog.pg_…

wsl 安装 ubuntu

文章目录 打开Windows PowerShell查看可安装的ubuntu安装相对应的ubuntu将用户添加到sudoers文件中&#xff0c;并赋予了该用户sudo权限。 打开Windows PowerShell 以管理员的身份运行 查看可安装的ubuntu wsl.exe --list --online安装相对应的ubuntu wsl --install 版本…

蓝桥杯错误记录

今天在做 小蜜蜂的综合案例的时候&#xff0c;数码管显示&#xff0c;有重影。 #include <STC15F2K60S2.H> unsigned char num; unsigned char code Duan[22]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80, 0xc6,0xc0,0x86,0x8e,0xbf,0x7f,0XC1,0X8C,0…

【云服务】-云服务 的基础

企业IT架构的演进历史 云计算的定义 云计算是一种模型&#xff0c;可以实现随时随地便携地可配置资源共享池中所需的资源&#xff08;例如&#xff0c;网络、服务器、存储、应用及服务&#xff09;。资源能快速供应并且释放&#xff0c;使管理资源的工作量和与服务提供商的交…

中小企业应该如何应用人才测评系统

人才测评系统应用场景越来越多&#xff0c;很多企业也开始通过人才测评系统&#xff0c;来对员工的性格特点和岗位进行评估&#xff0c;比如作为项目经理的我&#xff0c;总是想先从员工内部选拔领导者&#xff0c;然而这就有很大的难度&#xff0c;那么团队建设之初&#xff0…

Python小白福利之enumerate函数

enumerate函数用于遍历序列中的元素以及它们的下标。 enumerate函数说明&#xff1a; 函数原型&#xff1a;enumerate(sequence, [start0]) 功能&#xff1a;将可循环序列sequence以start开始分别列出序列数据和数据下标 即对一个可遍历的数据对象(如列表、元组或字符串)&a…

protobufjs使用教程,支持proto文件打包成typescript或javascript脚本

官方链接&#xff1a;https://docs.cocos.com/creator/manual/zh/scripting/modules/example.html 第一步&#xff0c;安装nodejs。&#xff08;自行安装&#xff09; 安装教程可参考 https://www.runoob.com/nodejs/nodejs-install-setup.html 第二步&#xff0c;创建cocos…