• 66. 加一


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

    直接对数组最后一个元素进行加一操作,判断特殊情况:最后一位是否为9,如果是9的话需要进位,前一位加1;循环计算前一位的数字,判断到第一位的时候,如果第一位大于9则在最前面再加一个数字

    //C
    
    int* plusOne(int* digits, int digitsSize, int* returnSize){
        int i;
        digits[digitsSize - 1] += 1;
        for(i = digitsSize - 1; i > 0; i--){
            if(digits[i] >= 10) {
                digits[i] %= 10; 
                digits[i - 1] += 1;
            }
            else 
                break;
        }
        if(digits[0] >= 10) {
            digits[0] %= 10;
            *returnSize = digitsSize + 1; 
            int *res = (int *)malloc(sizeof(int) * (*returnSize));
            res[0] = 1;
            digits[0] = 0;
            for(i = 0; i < digitsSize; i++) res[i + 1] = digits[i];
            return res;
        }
        else{
            *returnSize = digitsSize;
            int *res = calloc(*returnSize, sizeof(int));
            memcpy(res, digits, sizeof(int) * (*returnSize));
            return res;
        }     
    }
    
    //JS
    var plusOne = function(digits) {
        digits[digits.length - 1]++;
        for(var i = digits.length - 1; i > 0; i--){
            if(digits[i] >= 10) {
                digits[i] %= 10;
                digits[i - 1] += 1;
            }
            else
                break;
        }
        if(i == 0 && digits[i] >= 10) {
            digits[i] %= 10;
            digits.unshift(1);
        }
        return digits;
    };

    使用变量记录每个位置的进位

    //C
    
    int* plusOne(int* digits, int digitsSize, int* returnSize){
        int i, carry = 0;
        int *p = (int *)malloc(sizeof(int) * digitsSize);
        for(i = digitsSize - 1; i >= 0; i--){
            p[i] = digits[i] + carry;
            if(i == digitsSize - 1) p[i] += 1;
            if(p[i] == 10) {
                p[i] = 0; 
                carry = 1;
            }
            else 
                carry = 0;
        }
        if(carry == 1) {
            *returnSize = digitsSize + 1; 
            int *q = (int *)malloc(sizeof(int) * (*returnSize));
            q[0] = 1;
            for(i = 0; i < digitsSize; i++) q[i + 1] = p[i];
            return q;
        }
        else{
            *returnSize = digitsSize;
            return p;
        }     
    }
    
    //JS
    
    var plusOne = function(digits) {
        let tmp = 0;
        for(let i = digits.length - 1; i >= 0 ; i--) {  
            digits[i] += tmp;  
            if(i == digits.length - 1) digits[i]++;   
            if(digits[i] >= 10) {
                digits[i] = 0;
                tmp = 1;
            }
            else {           
                tmp = 0;
            }
        }
        if(tmp == 1){
            digits.unshift(1);
        }
        return digits;
    };
    

    JS里ES10中的新的基本类型BigInt,它可以兼容大数

    //JS
    
    var plusOne = function(digits) {
        return (BigInt(digits.join('')) + 1n).toString().split('').map(Number);
    };
    

      

  • 相关阅读:
    C# VideoAPI
    C# 列出进程
    利用SQL为Code128码添加起始符和休止符
    SQL sysobjects 表 详解
    跳过从Win7/8升级,直接格式化全新安装 Windows 10 并自动永久激活系统的方法教程
    SQL EXCEPT INTERSECT
    C# 重启程序本身
    SQL HAVING 子句使用
    SQL over的作用及用法
    SQL 游标 Cursor 基本用法
  • 原文地址:https://www.cnblogs.com/JesseyWang/p/13087773.html
Copyright © 2020-2023  润新知