前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode笔记:66. Plus One

LeetCode笔记:66. Plus One

作者头像
Cloudox
发布2021-11-23 14:03:14
1470
发布2021-11-23 14:03:14
举报
文章被收录于专栏:月亮与二进制月亮与二进制

问题:

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.

大意:

给出一个非负数的代表数字的数组,给这个“数字”加一。 这个数字的存储形式为最高位的数再数组的最前端。

思路:

但看题目还看不懂是什么意思,跑了几个测试用例后看答案看明白了,就是数组的每一个位置代表一个数的每一位,有个位十位百位等,如[8]表示数字8,[1,2]表示数字12等等,题目要求将给出的数字代表的数字加一并用同样的形式返回结果。

这个题目的要点在于对加法进位的判断,从个位数开始,如果加一后等于10,那么就要进位,而进位时也要不断对高位进行判断是否还要进位,所以只要把这个逻辑理清楚,代码还是好写出来的,我自己写出来的代码很复杂,明显可以进行优化。

后来看了下别人写的代码,思路差不多,也是判断进位,但是代码精简了许多,从最低位开始,如果不进位就直接返回,否则就按照要进位的方式去一遍遍循环,简单明了多了。

代码(Java):

代码语言:javascript
复制
public class Solution {
    public int[] plusOne(int[] digits) {
        int length = digits.length;
        int last = digits[length-1];
        last++;
        if (last < 10) {
            digits[length-1] = last;
        } else {// 最后一位要进位
            digits[length-1] = 0;// 最后一位记得置零
            int position = length-1;
            while (position >= 0) {
                if (position == 0) {// 只有一个数
                    // 在第0位插入一个数
                    int[] newDigits = new int[length+1];
                    newDigits[0] = 1;
                    for (int i = 0; i < length; i++) {
                        newDigits[i+1] = digits[i];
                    }
                    digits = newDigits;
                    break;
                } else {// 有多位数
                    position--;
                    int num = digits[position]+1;
                    if (num < 10) {
                        digits[position] = num;
                        break;
                    } else {// 要进位,置零后继续循环
                        digits[position] = 0;
                    }
                }
            }
        }
        return digits;
    }
}

他山之石:

代码语言:javascript
复制
public int[] plusOne(int[] digits) {
        
    int n = digits.length;
    for(int i=n-1; i>=0; i--) {
        if(digits[i] < 9) {
            digits[i]++;
            return digits;
        }
        
        digits[i] = 0;
    }
    
    int[] newNumber = new int [n+1];
    newNumber[0] = 1;
    
    return newNumber;
}

合集:https://github.com/Cloudox/LeetCode-Record

查看作者首页

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017/11/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题:
  • 大意:
  • 思路:
  • 代码(Java):
  • 他山之石:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档