初级算法-数组-加一

作者: coenen | 来源:发表于2021-08-01 07:29 被阅读0次
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9

摘一个示例做个说明.
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
条件分析:
  1. 只存储单个数字 -> 每一个元素都是 0 - 9
  2. 最高位存储在数组首位 -> 数字大小是从前往后的
  3. 不会以0开头,除了单数字0
解决思路1:
  1. 数组加一,说明从后往前加1
  2. 根据分析1、2,当最后为9时,需要进1.
常规办法采用可变数组去承接,然后判断数据是否为9,为9则进1,然后存储求余10后的数据.不是则直接存储.
解决思路2:思路2也是思路1的优化

根据分析1、2,说明不需要全部循环完数组,只要最后一个不为9,则加1.这时候该数组就是返回的数据.

判断是否为9,不是则加1返回.是9则继续循环.全部为9的话,首部加1表示进位.

代码实现-Swift版本:

思路1代码:

func plusOne(_ digits: [Int]) -> [Int] {
    /**
     先定义变量是否进一,然后根据当前值判断是否继续进一,如果进一,则加0,不进一则直接加.对首位和末尾做判断处理
     */
    var array: [Int] = []
    var isAdd: Bool = (digits.last! == 9)
    
    for i in 0 ..< digits.count {
        let tmp = digits[digits.count - 1 - i]
        if isAdd {
            array.insert((tmp + 1) % 10, at: 0)
            isAdd = (tmp + 1) > 9
            if isAdd && i == digits.count - 1{
                array.insert(1, at: 0)
            }
        }else{
            if i != 0 {
                array.insert(tmp, at: 0)
            }else{
                array.insert(tmp + 1, at: 0)
            }
        }
    }
    
    return array
}
加一 标志位 提交结果.jpg

思路2代码:

func plusOne(_ digits: [Int]) -> [Int] {
    /**
     先定义可变数组,然后判断是否为9,
     如果是则该数据为0,继续循环,不是则加1返回.
     如果全部为9则在返回前加一.
     时间0ms, 100% 内存13.8MB, 20.2%
     */
    var array = digits
    for i in (0 ..< array.count).reversed() {
        // 是9则置零,然后继续
        if array[i] == 9 {
            array[i] = 0
        }else{
            // 不是9,直接加一结束
            array[i] += 1
            return array
        }
    }
    // 全是9则进1
    array.insert(1, at: 0)
    return array
}
加一 直接判断 提交结果.jpg

测试用例:

let array1 = [2,9,9]

考察要点:

  • 数组
  • 数学

相关文章

  • 初级算法-数组-加一

    给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只...

  • 初级算法-加一

    给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只...

  • 刷题记录(初级算法-数组篇)

    最近开始认真刷题了,反正做了些题目就记录一些吧,这里记录了LeetCode初级算法中数组的一些题目: 加一 本来想...

  • 初级算法(一)(数组篇)

    移动零: 给定一个数组 nums, 编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序。例如, 定...

  • W3Cschool JavaScript脚本算法编程实战 初级脚

    初级脚本算法 1. 翻转字符串算法挑战 实战翻转字符串算法 你可以先把字符串转化成数组,再借助数组的reverse...

  • leetcode|初级算法-数组

    01 起 刷题固然爽快,但及时总结才是进步之道,下面就数组部分的题目进行回顾和总结。 注意,刷题使用的语言是Pyt...

  • leetcode 初级算法 数组

    原题目链接 删除排序数组中的重复项 ====>双指针动画演示 双指针解题代码思路 简化代码 复杂度分析:时间复杂度...

  • leetcode初级算法|数组

    删除排序数组中的重复项[https://leetcode-cn.com/leetbook/read/top-int...

  • 初级算法-数组-旋转数组

    给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。 进阶:尽可能想出更多的解决方案,至少有三种...

  • LeetCode初级算法--数组02:旋转数组

    LeetCode初级算法--数组02:旋转数组 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事...

网友评论

    本文标题:初级算法-数组-加一

    本文链接:https://www.haomeiwen.com/subject/tqdzmltx.html