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略微占了一些时间吧。

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

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

(0)
上一篇 2022年2月7日 上午10:00
下一篇 2022年2月7日 上午11:00


相关推荐

  • threadlocal详解_thread local

    threadlocal详解_thread localC#中,Thread类有一个IsBackground的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。个人感觉这样的解释等于没有解释..Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一的区别就是:后台线程不会防止应用程序的进程被终止掉。呵呵,这句话读出来好像并不那么好懂.其实,说白了就是当前台线程都结束了的时候,整个…

    2022年10月17日
    7
  • 系统首选dns服务器修改,如何在Windows系统中设置首选DNS「建议收藏」

    系统首选dns服务器修改,如何在Windows系统中设置首选DNS「建议收藏」有时候可能需要修改或者调整DNS服务器地址的设置,以达到优化网络连接速度的效果。那么如何在Windows系统中设置首选DNS呢?具体请看下面学习啦小编介绍的操作方法!在Windows系统中设置首选DNS的方法这里Windows8为例,首先在屏幕的右下角找到“网络连接”图标,在“网络连接”图标上点击鼠标右键,然后选择“打开网络和共享中心”,接下来在“网络和共享中心”窗口中点击左侧的“更改适…

    2022年6月1日
    53
  • GoLang入门1-安装-配置

    GoLang入门1-安装-配置Go的三种安装方式Go有多种安装方式,你可以选择自己喜欢的。这里我们介绍三种最常见的安装方式:Go源码安装:这是一种标准的软件安装方式。对于经常使用Unix类系统的用户,尤其对于开发者来说,从源码安装是最方便而熟悉的。Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统。这种方式适合初学者,可根据自己的系统位数下载好相应的安装包,一路next就可以轻松安装了

    2022年6月25日
    34
  • 公布2019年人工智能将会如何改变我们未来的行业

    公布2019年人工智能将会如何改变我们未来的行业

    2021年7月8日
    65
  • Druid介绍及入门[通俗易懂]

    Druid介绍及入门[通俗易懂]1.什么是Druid?Druid是一个高效的数据查询系统,主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。Druid采用的架构: shared-nothing架构与lambda架构 Druid设计三个原则:1.快速查询(FastQu…

    2022年7月23日
    10
  • Ps2025激活成功教程版能用AI吗?Ps2025电脑配置要求

    Ps2025激活成功教程版能用AI吗?Ps2025电脑配置要求

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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