LeetCode 66. 加1

题目:
给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。

示例2:

输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

思路与解答:

题解一:

这道题最直观的方法就是首先判断末位是否为9,不为9,直接加1返回,具体为:

  1. 从末位开始,判断是否为9,是?则置0,否,则加一返回;
  2. 依次循环判断,知道首位;
  3. 但完成循环后,还都需要判断是否首位为0,为0?则在首位前插入一位,置1。
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        int n  = digits.size();
        for(int i = n - 1; i >= 0; i--)
        {
            if (digits[i] == 9) digits[i] = 0;
            else
            {
                digits[i] += 1;
                return digits;
            }
        }
        if(digits[0] == 0) digits.insert(digits.begin(), 1);
        return digits;
    }
};

题解二:

此题另一种方法是设置一个标志位,具体步骤为:

  1. 定义标志位(进位)flag为1,从容器末位开始,将末位与标志为1相加,取余作为标志位,同时做除法,获得新的标志位;
  2. 依次循环,当标志位为0,即不需要进位时,返回结果,否则重复步骤1;
  3. 最后还需要判断容器首位的值;
  4. 结束。
class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        if (digits.empty()) return digits;
        int n = digits.size();
        int sum, flag = 1;
        for (int i = n-1; i >= 0; i--)
        {
            if (flag == 0) return digits;
            sum  = digits[i] + flag;
            digits[i] = sum % 10;
            flag = sum / 10;
        }
        if (digits[0] == 0) digits.insert(digits.begin(), 1);
        return digits;
    }
};

参考:

https://github.com/grandyang/leetcode/issues/66

原文地址:https://www.cnblogs.com/Eagleeye1105/p/11663719.html

时间: 2024-10-06 06:09:46

LeetCode 66. 加1的相关文章

[leetcode] 66. 加一

66. 加一 模拟加法运算,很简单 注意进位即可 class Solution { public int[] plusOne(int[] digits) { int k = digits.length - 1; digits[k] += 1; while (k > 0) { if (digits[k] < 10) break; digits[k] -= 10; digits[k - 1] += 1; k--; } if (digits[0] >= 10) { digits[0] -= 1

leetcode 66. 加一(Plus One)

目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123. 示例 2: 输入: [4,3,2,1] 输出: [4,3,2,2] 解释: 输入数组表示数字 4321. 解法: class Solution { publi

LeetCode 66. 加一(java)

题目: https://leetcode-cn.com/problems/plus-one/ 如果digits数组最后一位小于9,则只需要将digits数组最后一个数+1,返回digits数组即可:如果最后一位等于9,则需要设置一个循环进行加法模拟,即对每一位进行判断,小于10退出循环,如果等于10,进位,这种情况则需创建一个新数组,长度为digits长度加一,将数据保存进去即可. 代码: class Solution { public int[] plusOne(int[] digits) {

Leetcode#66.加一 (C++解法)

目录 一.题目描述 二.解法 9,9,9,9 1,2,3,4 & 1,9,9,9 题目链接: https://leetcode-cn.com/problems/plus-one/ 一.题目描述 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 1: 输入: [1,2,3] 输出: [1,2,4] 解释: 输入数组表示数字 123. 示例 2: 输入: [4,

LeetCode 66. Plus One(加1)

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

LeetCode 66 Plus One(加一)(vector)

翻译 给定一个以一系列数字表示的非负数.将其加一并转换成数字. 数字存储的最高位在列的最前面. 原文 Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. 分析 一看到这个题目我就想起来前面做过的一道关于求

[leetcode]66. Plus One加一

Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The digits are stored such that the most significant digit is at the head of the list, and each element in the array contain a single digit. You may assum

leetCode 66. Plus One 数组

66. Plus One Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. 题目大意:将一个数字的各位都放在一个数组中,给这个数字加1,求得到的新数组. 高位在前. class Solution { p

leetcode—66 Plus One(数组中的值+1进位操作,数组扩充)

Plus One 66  Total Accepted: 48227 Total Submissions: 157869 My Submissions Question Solution Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the