leetcode#66. Plus One

2024-09-07 22:08
文章标签 leetcode plus one 66

本文主要是介绍leetcode#66. Plus One,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.

You may assume the integer do not contain any leading zero, except the number 0 itself.

The digits are stored such that the most significant digit is at the head of the list.

理解

看到这个题,忍不住就想用递归,虽然递归可能不是最快的方法,但是不用就会觉得蠢啊,代码不够简单啊,于是下面的代码就是结果

代码一

class Solution(object):def plusOne(self, digits):""":type digits: List[int]:rtype: List[int]"""if digits[0] == 0 and len(digits) == 1:return [1]elif digits[-1] == 9:digits[-1] = 0return self.addOne(digits, -2)else:digits[-1] += 1return digitsdef addOne(self, digits, pos):if abs(pos) > len(digits):digits = [1] + digitselif digits[pos] == 9:digits[pos] = 0return self.addOne(digits, pos - 1)else:digits[pos] += 1return digits

就不解释了,很简单的题。问题是提交后发现才打败23.97%的人,用了52ms。我去,别人的代码都是有多快,不行我得改进下,不能用递归。估计是函数调用浪费的时间,我得把addOne去掉。

代码二

class Solution(object):def plusOne(self, digits):""":type digits: List[int]:rtype: List[int]"""if digits[0] == 0 and len(digits) == 1:return [1]pos = -1while True:if abs(pos) > len(digits):return [1] + digitsif digits[pos] == 9:digits[pos] = 0pos -= 1else:digits[pos] += 1return digits

我去,这个代码用时86ms,只打败了0.93%的人,虽然代码简短了很多…然后我不太相信的又提交了一遍,变成35ms,打败94.72%的人了[笑哭脸],对此我也是无”法科”说。闲着的我又提交了一次,倒是没变化了,看来第一次提交时不知道发生了什么不科学的事。

代码三

class Solution(object):def plusOne(self, digits):""":type digits: List[int]:rtype: List[int]"""pos = -1while abs(pos) <= len(digits):if digits[pos] == 9:digits[pos] = 0pos -= 1else:digits[pos] += 1return digitsreturn [1] + digits

回头又看了下,其实可以更简单啊,最终应该就是这样了。用时就不放上来了,每次都不一样…

结论

再次证实了,循环和递归可以进行某种程度上的互换,但是千万别随意同时使用,谨以此文纪念今天花费了许多时间解决的leetcode第10题

这篇关于leetcode#66. Plus One的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146289

相关文章

mybatis-plus如何根据任意字段saveOrUpdateBatch

《mybatis-plus如何根据任意字段saveOrUpdateBatch》MyBatisPlussaveOrUpdateBatch默认按主键判断操作类型,若需按其他唯一字段(如agentId、pe... 目录使用场景方法源码方法改造首先在service层定义接口service层接口实现总结使用场景my

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

Mybatis-Plus 3.5.12 分页拦截器消失的问题及快速解决方法

《Mybatis-Plus3.5.12分页拦截器消失的问题及快速解决方法》作为Java开发者,我们都爱用Mybatis-Plus简化CRUD操作,尤其是它的分页功能,几行代码就能搞定复杂的分页查询... 目录一、问题场景:分页拦截器突然 “失踪”二、问题根源:依赖拆分惹的祸三、解决办法:添加扩展依赖四、分页

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

mybatis-plus QueryWrapper中or,and的使用及说明

《mybatis-plusQueryWrapper中or,and的使用及说明》使用MyBatisPlusQueryWrapper时,因同时添加角色权限固定条件和多字段模糊查询导致数据异常展示,排查发... 目录QueryWrapper中or,and使用列表中还要同时模糊查询多个字段经过排查这就导致只要whe

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6