Plus One解题报告分析

来源:互联网 发布:mac的照片导入ps 编辑:程序博客网 时间:2024/05/20 10:22

Plus One

我的思路:

1  自然是从后面开始判断,如果是9那么就要进位变成0,依次后面都要改变,直到不是9为止,返回数组。如果全部是9,那么就要把第一个数变成1,接着每个数变成0,然后再添加一个0。

贴出代码如下,

        vector<int> AddOneDigits = digits;    vector<int>::iterator i;        for (i = AddOneDigits.begin(); i != AddOneDigits.end(); i++) {  //这里寻找了第一个9出现的位置,没有任何必要    if (*i != 9) {    for (vector<int>::iterator j = AddOneDigits.end() - 1; j >= i; --j) {                                  //直接改变了一个数,也可以使用取余之类的方法来实现    if (*j == 9)    *j = 0;    else {    (*j)++;    return AddOneDigits;    }    }    }    }        //这一大段代码可以用一个vector的插入来完成 AddOneDigits.insert(AddOneDigits.begin(), 1)        if (i == AddOneDigits.end()) {    *AddOneDigits.begin() = 1;    for (auto k = AddOneDigits.begin() + 1; k != AddOneDigits.end(); ++k)     *k = 0;    AddOneDigits.push_back(0);    }    return AddOneDigits;
最近刚开始做这些题,发现自己的思路还是非常混乱,没有什么逻辑性可言,每做一题要尽量能够有一些的提升。下面是修改代码。

        vector<int> AddOneDigits = digits;    vector<int>::iterator i;for (vector<int>::iterator i = AddOneDigits.end() - 1; i >= AddOneDigits.begin(); --i) {if (*i == 9)*i = 0;else {(*i)++;return AddOneDigits;}}    AddOneDigits.insert(AddOneDigits.begin(), 1);    return AddOneDigits;

今天遇到的两题主要的思维是:

1  逆向解决问题,通过循环来做到不满足条件的时候跳过我们要执行的代码。如数组元素去重。


今天两题到此结束。

0 0