zoukankan      html  css  js  c++  java
  • 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.

    链接:  http://leetcode.com/problems/plus-one/

    题解:

    Time Complexity - O(n), Space Complexity - O(n)。

    public class Solution {
        public int[] plusOne(int[] digits) {
            int carry = 1;
            for(int i = digits.length - 1; i >= 0; i --){
                int curValue = digits[i];
                digits[i] = (curValue + carry) % 10;
                carry = (curValue + carry) >= 10 ? 1 : 0;
            }
            
            if(carry == 1){
                int[] result = new int[digits.length + 1];
                result[0] = 1;
                for(int i = 1; i < result.length; i ++){
                    result[i] = digits[i - 1];
                }
                return result;
            } else 
                return digits;
        }
    }

    Update:

    public class Solution {
        public int[] plusOne(int[] digits) {
            if(digits == null || digits.length == 0)
                return digits;
            int carry = 1;
            
            for(int i = digits.length - 1; i >=0; i--) {
                int cur = digits[i];
                digits[i] = (cur + carry) % 10;
                carry = (cur + carry) >= 10 ? 1 : 0;
            }
            
            if(carry == 1) {
                int[] newDigits = new int[digits.length + 1];
                newDigits[0] = 1;
                
                for(int i = 1; i < newDigits.length; i++)
                    newDigits[i] = digits[i - 1];
                    
                return newDigits;
            }
            
            return digits;
        }
    }

    二刷:

    注意carry最后为1的情况

    Java:

    Time Complexity - O(n), Space Complexity - O(n)。

    public class Solution {
        public int[] plusOne(int[] digits) {
            if (digits == null || digits.length == 0) {
                return digits;
            }
            int carry = 1, cur = 0;
            for (int i = digits.length - 1; i >= 0; i--) {
                cur = (digits[i] + carry) % 10;
                carry = (digits[i] + carry >= 10) ? 1 : 0;
                digits[i] = cur;
            }
            if (carry == 1) {
                int[] newDigits = new int[digits.length + 1];
                newDigits[0] = 1;
                for (int i = 1; i < newDigits.length; i++) {
                    newDigits[i] = digits[i - 1];
                }
                return newDigits;
            } 
            return digits;
        }
    }

    三刷:

    Java:

    public class Solution {
        public int[] plusOne(int[] digits) {
            if (digits == null) {
                return digits;
            }
            int carry = 1;
            int len = digits.length;
            for (int i = len - 1; i >= 0; i--) {
                digits[i] += carry;
                carry = (digits[i] >= 10) ? 1 : 0;
                digits[i] %= 10;
            }
            if (carry == 1) {
                int[] res = new int[len + 1];
                res[0] = 1;
                for (int i = 1; i <= len; i++) {
                    res[i] = digits[i - 1];
                }
                return res;
            }
            return digits;
        }
    }

    从luke处学到的方法,非常好用。

    public class Solution {
        public int[] plusOne(int[] digits) {
            if (digits == null) {
                return digits;
            }
            int i = digits.length - 1;
            while (i >= 0) {
                if (digits[i] == 9) {
                    digits[i--] = 0;
                } else {
                    digits[i] += 1;
                    return digits;
                }
            } 
            int[] res = new int[digits.length + 1];
            res[0] = 1;
            return res;
        }
    }
  • 相关阅读:
    perl 解json数组
    华为云3大体系化防护实践,保障金融业云上数据安全
    弹性文件服务解密 -- 块存储、文件存储、对象存储的区别
    【nodejs原理&源码赏析(6)】深度剖析cluster模块源码与node.js多进程
    云+AI+5G时代,华为云已准备好多元化云服务架构
    高能街访 | 为什么他们都纷纷为深圳打Call?
    Angularjs进阶笔记(2)—自定义指令中的数据绑定
    Angularjs进阶笔记(1)—不同类型的双向数据绑定
    ServiceComb java-chassis和CSE java-chassis的区别
    使用inspector功能查看和管理契约
  • 原文地址:https://www.cnblogs.com/yrbbest/p/4436428.html
Copyright © 2011-2022 走看看