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

      

  • 相关阅读:
    微信授权,重定向两次
    Newtonsoft.Json 序列化 排除指定字段或只序列化指定字段
    各大快递公司面单号准确性验证的正则表达式,来自淘宝开放平台,时间是20181206,
    微信小程序web-view(webview) 嵌套H5页面 唤起微信支付的实现方案
    HTTP请求头及其作用 转
    sql server 只读帐号设置能读取存储过程,view等内容。
    PhantomJS命令行选项
    XML实体注入漏洞
    XmlDocument 避免XXE
    Centos7.6安装redis
  • 原文地址:https://www.cnblogs.com/JesseyWang/p/13087773.html
Copyright © 2011-2022 走看看