Leetcode: Plus One

Leetcode: 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.

题目意思是说给定一个数这个数以数组的形式表示,就是说这个数各个位上的数保存在一个数组里面,然后给这个数加一。求返回的结果。当然仍旧以数组的形式返回。

C++演示样例代码:

class Solution {
public:
    vector<int> plusOne(vector<int> &digits)
    {
        vector<int>::size_type size = digits.size();
        //当digits的每一位都是9的时候,由于返回的结果位数要添加1。所以做一个特殊处理。

bool flag = true; for (size_t i = 0; i < size; i++) { if (9 != digits[i]) { flag = false; } } if (flag) { digits.resize(size + 1); digits[0] = 1; for (size_t i = 1; i <= size; i++) { digits[i] = 0; } return digits; } //当digits的每一位并不都是9的时候 //假设最后一位不是9,直接加一返回 if (digits[size - 1] != 9) { digits[size - 1]++; return digits; } //假设最后一位是9,则变成0,前面一位加一,假设加一以后变成10。则循环进行这种处理 else { digits[size - 1] = 0; digits[size - 2]++; for (int i = size - 2; i >= 0; i--) { if (10 == digits[i]) { digits[i] = 0; digits[i - 1]++; } } } return digits; } };

我写的代码看起来比較繁琐,看到网上有高手这样做的:

class Solution 
{
public:
    vector<int> plusOne(vector<int> &digits) 
    {
        vector<int> ret(digits);
        reverse(ret.begin(), ret.end());

        int flag = 1;
        for(int i = 0; i < ret.size(); i++)
        {
            ret[i] += flag;
            //这里的flag的结果要么是0。要么是1
            flag = ret[i] / 10;
            ret[i] %= 10; 
        }

        if (flag == 1)
            ret.push_back(1);

        reverse(ret.begin(), ret.end());

        return ret;
    }
};

只是,最后这两段代码咱Leetcode上提交以后都用时是4ms!肯能是后者的代码中用了两次vector的reverse略微占了一些时间吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115231.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vim复制粘贴_vim怎么复制粘贴到其他程序

    vim复制粘贴_vim怎么复制粘贴到其他程序Vim复制粘贴探秘Vim作为最好用的文本编辑器之一,使用vim来编文档,写代码实在是很惬意的事情。每当学会了vim的一个新功能,就会很大地提高工作效率。有人使用vim几十年,还没有完全掌握vim的功能,这也说明了vim的强大。而这样何尝不是一件好事呢,只要有的学习,就有的提高。最近使用Vim来写博客,发现在Vim中粘贴Python代码后,缩进就全乱了。仔细研究了以下,原来是自动缩进的缘故,于是做如下设置::setnoainosi取消了自动缩进和智能缩进,这样粘贴就不会错行了。但

  • 天气太冷不想出被窝?来DIY一个离线语音控制器[通俗易懂]

    天气太冷不想出被窝?来DIY一个离线语音控制器[通俗易懂]天气太冷不想出被窝?来DIY一个离线语音控制器点击上方“Embeded小飞哥”,选择“置顶/星标公众号”干货福利,第一时间送达!成就一番伟业的唯一途径就是热爱自己的事业。如果你还没能找到让自己热爱的事业,继续寻找,不要放弃。跟随自己的心,总有一天你会找到的。——乔布斯  你去关灯,你去,你去,。。我去。。小伙伴们有没有在天气寒冷时候,想去关灯,却离不开心爱的被窝的经历呢,有的话,跟着小飞哥一起来DIY一个离线语音控制器,有了它,我们

  • python获取当前时间的时间戳_python精确到毫秒时间戳

    python获取当前时间的时间戳_python精确到毫秒时间戳在Python中可以使用来自模块time、datetime或calendar的函数来获取当前时间戳,代码语句如【importtime;ts=time.time()print(ts)】。在Python中,有多种方法可以获得当前时间戳。如果希望在Python中获得时间戳,可以使用来自模块time、datetime或calendar的函数。使用模块time模块time是提供各种与时间相关的功能。…

  • python约瑟夫环「建议收藏」

    python约瑟夫环「建议收藏」第一次出队的那个人的编号是(m-1)%n,第二次重新开始的编号是m%n约瑟夫环是一个经典的数学问题,我们不难发现这样的依次报数,似乎有规律可循。为了方便导出递推式,我们重新定义一下题目。 问题: N个人编号为1,2,……,N,依次报数,每报到M时,杀掉那个人,求最后胜利者的编号。这边我们先把结论抛出了。之后带领大家一步一步的理解这个公式是什么来的。 一般解法找到出列的人,把它删…

  • insertBefore()

    insertBefore()insertBefore()方法将把一个给定的节点插入到一个给定元素节点的给定子节点前面,他返回一个指向新增子节点的引用指针:如上所示,节点newNode将被插入元素节点element并出现在节点t

  • 零基础学Java(7)大数

    零基础学Java(7)大数大数如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInte

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号