[LeetCode]11. 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:将一个数字的每个位上的数字分别存到一个一维向量中,最高位在最开头。注意这是个大数问题,不能先遍历以计算出digits所表示的数,然后再加1,最后将其顺序放到vector中。

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        vector<int> res;
        int n = digits.size();
        int carry = 0;
        int one = 1;
        for(int i = n - 1; i >= 0; i--)
        {
            int num = digits[i] + one + carry;
            one = 0;
            carry = num / 10;
            res.push_back(num % 10);
        }
        if(carry)
            res.push_back(carry);
        reverse(res.begin(), res.end());

        return res;
    }
};

解法2:算法如下:首先判断最后一位是否为9,若不是,直接加一返回,若是,则该位赋0,再继续查前一位,同样的方法,知道查完第一位。如果第一位原本为9,加一后会产生新的一位,那么最后要做的是,查运算完的第一位是否为0,如果是,则在最前头加一个1。参考:http://www.cnblogs.com/grandyang/p/4079357.html

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.front() == 0) digits.insert(digits.begin(), 1);
        return digits;
    }
};
时间: 2024-10-13 11:28:59

[LeetCode]11. Plus One加一运算的相关文章

[LeetCode] Plus One Linked List 链表加一运算

Given a non-negative number represented as a singly linked list of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. Example: Input: 1->2->3 Output: 1->2->4 这道题给了我们一个链表,用来模拟一

Leetcode 592.分数加减运算

分数加减运算 给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果. 这个结果应该是不可约分的分数,即最简分数. 如果最终结果是一个整数,例如 2,你需要将它转换成分数形式,其分母为 1.所以在上述例子中, 2 应该被转换为 2/1. 示例 1: 输入:"-1/2+1/2" 输出: "0/1"  示例 2: 输入:"-1/2+1/2+1/3" 输出: "1/3" 示例 3: 输入:"1/3-1/

字符串大数加减运算问题

这里自己利用STL模板中的容器和链表实现字符串大数加减运算. 1 #include<iostream> 2 #include<vector> 3 #include<list> 4 using namespace std; 5 6 list<char> Input_Number(list<char> ilist)//输入链表字符串,以‘#’作为结束符 7 { 8 cout<<"please Input string ,end

C_BigDecimal_加减运算

首先举个例子说说思路: 输入str1:1.341   str2:11.2  在C语言中存储字符串的直接是字符型数组,strlen(str)代表字符串的长度(那个小数点也要算的),则str1,str2的长度为5和4.而浮点数加减运算时遵循从右往左计算,所以首先要使得字符串格式化.找到并返回存储字符串中小数点的下标,str1,str2小数点位置下标为1和2,然后用字符串长度减去即可求出小数点后的位数差,通过循环将短的加0补齐,为1.341,11.200,最后按最长长度循环将字符从右依次赋值给自定的c

浮点加减运算中左规右规问题

当尾数用二进制表示时,浮点规格化的定义是尾数M应满足:  1/2   ≤  |M|<1 显然对于正数而言,有M = 00.1φφ-φ:对于负数,其补码形式为11.0φφ-φ(即-0.0*******,左归).这样,当进行补码浮点加减运算时,只要对运算结果的符号位和小数点后的第一位进行比较:如果它们不等,即为00.1φφ-φ或11.1φφ-φ,就是规格化的数:如果它们相等,即为00.0φφ-φ或11.0φφ-φ,就不是规格化的数,在这种情况下需要尾数左移以实现规格化的过程,叫做向左规格化.规则是:

[Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction

Given a string representing an expression of fraction addition and subtraction, you need to return the calculation result in string format. The final result should be irreducible fraction. If your final result is an integer, say 2, you need to change

实现两个超过正整数最大值的加和运算(js)

要求: 实现两个超过最大正整数的加和运算,输入输出都为字符串 /********* * a: 超过Infinity 的字符串类型的值 * b: 超过Infinity 的字符串类型的值 * result : 结果的字符串类型的表示 *********/eg: functin add(a, b){ ...... } <script type="text/javascript"> function add(a, b) { if(!a || !b) { throw Error('i

NGINX 加载动态模块(NGINX 1.9.11开始增加加载动态模块支持)

NGINX 1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展.目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块. [email protected]:~/nginx-1.12.0$ ./configure --help | grep dynamic --with-http_xslt_module=dynamic enable dynamic ngx_http_xslt_module --with-http_image_filter_mo

一个线程加一运算,一个线程做减一运算,多个线程同时交替运行--synchronized

使用synchronized package com.pb.thread.demo5; /**使用synchronized * 一个线程加一运算,一个线程做减法运算,多个线程同时交替运行 * * @author Denny * */ public class Count { private int num = 0; private boolean flag = false; // 标识 //加法 public synchronized void add() { while (flag) { tr