2575. 找出字符串的可整除数组(Go语言)

news2024/10/24 9:24:36

https://leetcode.cn/problems/find-the-divisibility-array-of-a-string/

在这里插入图片描述

  • 在看题解之前,我的代码是以下这样:
package main

import (
	"fmt"
)

func main() {
	fmt.Println(divisibilityArray("998244353", 3))
}

func divisibilityArray(word string, m int) []int {
	result := make([]int, len(word))
	sum := 0
	for i, num := range word {
		sum = sum*10 + int(num-'0')
		//fmt.Println(sum)
		if sum%m == 0 {
			result[i] = 1
		} else {
			result[i] = 0
		}
	}
	return result
}

在这里插入图片描述

  • 在运行时,会卡在当前数据上,看逻辑,总觉得没有问题,但会出现如此结果,只好去翻看官解,官方的答案思路如下:
func divisibilityArray(word string, m int) []int {
	result := make([]int, len(word))
	sum := 0
	for i, num := range word {
		sum = (sum*10 + int(num-'0'))%m
		//fmt.Println(sum)
		if sum == 0 {
			result[i] = 1
		} else {
			result[i] = 0
		}
	}
	return result
}
  • 从代码上看,区别在if里面去%求余和在sum计算时求余的区别,后来在单步执行的时候,猛然发现其中的区别:
  • 第一个代码中,sum在每次循环中都被累加,只有在进行条件判断时才对m取模。这意味着sum的值可能会迅速增长,尤其是当word表示一个非常大的数时。这种方法的缺点是,如果word足够长,就可能导致sum变量溢出(超过Go语言整数类型可以表示的最大值),从而导致错误的结果。
  • 第二个代码中,每次循环迭代都会先计算(sum*10 + int(num-‘0’)),然后立即对m取模来更新sum。这种方法的优点是sum的值永远不会超过m的值,有效避免了整数溢出的问题,尤其是当处理非常大的数字时。这也意味着即使是非常长的word字符串,这段代码也能正确运行而不会因为整数溢出而失效。

总结

  • 第一个方法在进行模运算之前允许sum增长,可能会在处理非常大的数字时遇到整数溢出问题。
  • 第二个方法通过在每次迭代中立即对m取模来避免整数溢出,使得算法对于任意长度的输入都是安全的。
  • 因此,第二个方法更健壮,特别是当处理大数或者不确定输入大小时。

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

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

相关文章

数据备份:守护你的数字资产,安全无忧!

一、数据备份:数字时代的“保险箱” 在数字化日益盛行的今天,我们的工作、学习和生活都离不开各种电子设备。无论是电脑中的文档、图片,还是手机里的联系人、短信,都承载着我们的重要信息和回忆。然而,电子设备并非永…

基于C/S架构的在线阅读器

项目简介 本项目实现了用户的基本阅读功能。项目内容涉及到IO,网络编程,C,QT等知识点。本次项目服务器搭建在ubuntu上,客户端ui在QT中实现,客户端和服务器使用套接字通信。 一、基本功能展示 (1&#xff…

关于制作一个Python小游戏(三)

目录 前言: 在前面我们已经了解过了关于制作pygame的使用和在里面游戏中的简单操作的内容了,今天我们主要讲的就是关于敌机的出现和如何去操控游戏中英雄飞机和敌机的出现 1.敌机的设计: 1.1敌机出场的实现: 1.1.1游戏启动后,每个一秒钟出现一架敌方飞机 1.1.2每架敌机向屏…

ETL与抖音数据同步,让数据流动无阻

在当今数字化时代,数据的价值日益凸显,企业需要从各种渠道获取有关用户行为、市场趋势和竞争对手活动的数据。作为一家专注于数据集成和转换的领先平台,ETLCloud为企业提供了强大的数据同步和转换功能。而与此同时,抖音作为一款热…

vcomp140.dll丢失如何修复,5种修复方法轻松搞定vcomp140.dll问题

vcomp140.dll文件的丢失可能会引发一系列系统运行与软件功能上的问题。具体来说,这个动态链接库文件是Visual C Redistributable的一部分,对于许多基于此环境开发的应用程序至关重要。一旦缺失,可能会导致部分应用程序无法正常启动或运行&…

深入浅出(二)MVVM

MVVM 1. 简介2. 示例 1. 简介 2. 示例 示例下载地址:https://download.csdn.net/download/qq_43572400/88925141 创建C# WPF应用(.NET Framework)工程,WpfApp1 添加程序集 GalaSoft.MvvmLight 创建ViewModel文件夹,并创建MainWindowV…

SAP Parallel Accounting(平行分类账业务)配置及操作手册(超详细的说明和测试)

SAP Parallel Accounting(平行分类账业务)配置及操作手册 1、Overview 为了适应不同的会计准则,SAP在新总账中启用了多分类账,(其作用简单来说就是,同时一笔记账,会产生多个账套的凭证。)分类账可以对应一…

一文掌握:电力管理系统该的功能和界面设计

一、什么电力管理系统 电力管理系统是一个用于监控、控制和优化电力系统运行的软件系统。它集成了实时数据采集、数据分析、决策支持和远程控制等功能,旨在提高电力系统的运行效率、可靠性和安全性。 电力管理系统是一个集成了数据采集、监控、分析和控制等功能的软…

应用层协议--HTTP

目录 一.HTTP是什么? 二.HTTP的请求和响应 a.请求: b.响应: 三.URL 四.Header 1.Host 2. Content-Length 3. Content-Type a. 请求 b. 响应 4. Referer 5. User-Agent 6. Cookie 一.HTTP是什么? HTTP是一种应用层协议&#xff0c…

Java并发编程-实现多线程的四种方式

创建线程的四种方式 创建线程的四种方式包括使用继承 Thread 类、实现 Runnable 接口、使用 Callable 和 Future 接口以及利用线程池。每种方式都有其特定的优势和适用场景。通过继承 Thread 类或实现 Runnable 接口,可以定义线程要执行的任务,并通过调用…

图形系统开发实战课程:进阶篇(上)——10.应用实例:交通路网

图形开发学院|GraphAnyWhere 课程名称:图形系统开发实战课程:进阶篇(上)课程章节:“图形样式”原文地址:https://www.graphanywhere.com/graph/advanced/2-10.html 第十章 应用实例:交通路网 \quad 在前面几…

Spring学习 基础(一)

Spring基础 IoC容器(Inversion of Control): Spring 的核心是其控制反转(IoC)容器,它负责管理对象的生命周期和相互之间的依赖关系。通过依赖注入(Dependency Injection),Spring能够…

python 基础知识点(蓝桥杯python科目个人复习计划59)

今日复习内容:做题 例题1:建造房屋 问题描述: 小蓝和小桥是两位年轻的建筑师,他们正在设计一座新的城市。 在这个城市中,有N条街道,每条街道上有M个位置可以建造房屋(一个位置只能建造一个房…

【java】后序遍历二叉树

采用递归方式实现 节点类 public class Node {private int value;//父节点private Node fNode;//左节点private Node left;//右节点private Node right;//是否已经打印过private boolean sign false;public Node() {}public boolean isSign() {return sign;}public void setS…

融资项目——OpenFeign的降级与熔断

当一个微服务调用其他微服务时,如果被调用的微服务因各种原因无法在规定时间内提供服务,则可以直接使用本地的服务作为备选,即进行降级熔断。 如之前所提到的微服务为例: 如果希望实现降级熔断,可以在本地创建一个实现…

【Spring云原生系列】Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合!

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

HYBBS 表白墙网站PHP程序源码

安装教程 上传程序安装,然后设置账号密码,登陆后台切换模板手机PC都要换开启插件访问前台。 安装完成后如果不能正常访问就删除install安装文件夹 安装完成后右上角登录后点击头图进入后台 找到插件 安装表白墙配置插件 找到模板 将表白墙模板同时设…

18个惊艳的可视化大屏(第19辑):工业制造、智能工厂

实时监控和数据展示 可视化大屏可以集成和展示各种传感器、设备和系统的实时数据。通过将数据可视化展示在大屏上,工厂管理人员可以实时监控生产线的状态、设备的运行情况、生产效率等重要指标。这有助于及时发现问题、做出决策,并提高生产效率和质量。…

多模态入门

VIT处理图像 CNN VS Transformer 多模态BLIP模型 网络结构 视觉编码器: 就是 ViT 的架构。将输入图像分割成一个个的 Patch 并将它们编码为一系列 Image Embedding,并使用额外的 [CLS] token 来表示全局的图像特征。视觉编码器不采用之前的基于目标检测器的形式,因为 ViLT 和…

【Linux】权限管理(文件的访问者、类型和访问权限,chmod、chown、chgrp、umask,粘滞位)

目录 00.前言 01.文件访问者的分类 02.文件类型和访问权限 文件类型: 文件基本权限: 03.文件权限值的表示方法 04.访问权限的设置 (1)chmod (2)chown (3)chgrp &#xff0…