Plus One解题报告分析

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值