• 加一


    题目:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

    最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

    你可以假设除了整数 0 之外,这个整数不会以零开头。

    示例 1:

    输入: [1,2,3]
    输出: [1,2,4]
    解释: 输入数组表示数字 123。
    

    示例 2:

    输入: [4,3,2,1]
    输出: [4,3,2,2]
    解释: 输入数组表示数字 4321。

    给定函数声明:

    vector<int>plusOne(vector<int>& digits)
    {
    }
    

    解题:

    首先我们需要考虑2种情况,假设

    输入是[9,9,9,9,9],输出则应该是[1,0,0,0,0,0];假设输入时[9,8,7,6,5,4,3,2,1],输出则应该是[9,8,7,6,5,4,3,2,2]。由此可得出有可能会改变vector的长度。

    解题方式有很多,如

    1、定义一个数组,将处理结果放入到数组中,然后再从数组转换成vector。

    vector<int>plusOne(vector<int>& digits)
    {
    	vector<int> rst;
    	int nArrayLength = digits.size() + 1;
    	int *pArray = new int[nArrayLength]{0};
    	int nCurrentIndex = nArrayLength - 1;
    	bool isPlueOne = true;
    	for(auto end = digits.end() - 1; end >= digits.begin(); end--)
    	{
    		int value = *end;
    		if(isPlueOne)
    		{
    			value += 1;
    			if(value >= 10)
    				value = 0;
    			else isPlueOne = false;
    		}
    		pArray[nCurrentIndex--] = value;
    	}
    	if(isPlueOne)pArray[nCurrentIndex] = 1;
    
    	for(nCurrentIndex = pArray[0] == 0 ? 1 : 0; nCurrentIndex < nArrayLength; nCurrentIndex++)
    		rst.push_back(pArray[nCurrentIndex]);
    	delete[] pArray;
    	return rst;
    }
    

      

    2、不借助以上数组,当需要增加vector长度的时候push_back一下,将前面的数据往后移。即digits[n] = digits[n - 1],移完以后再修改第一个元素的值为1.

    vector<int>plusOne(vector<int>& digits)
    {
    	bool isPlueOne = true;
    	for(auto end = digits.end() - 1; end >= digits.begin(); end--)
    	{
    		if(isPlueOne)
    		{
    			*end += 1;
    			if(*end >= 10)
    				*end = 0;
    			else isPlueOne = false;
    		}
    	}
    	if(isPlueOne)
    	{
    		digits.push_back(0);
    		for(auto end = digits.end() - 1; end > digits.begin(); end--)
    			*end = *(end - 1);
    		*digits.begin() = 1;
    	}
    
    	return digits;
    }
    

      

    解决方法有很多,并不局限于这两种!

  • 相关阅读:
    Redis详解
    Linux常用命令
    sqlserver 游标写法
    Flask总结
    HTTPS协议
    Django REST framework 简介
    Cookie和session
    利用rest-framework编写逻辑关系
    vuex
    jQuery和Bootstrap的优点
  • 原文地址:https://www.cnblogs.com/LandyTan/p/12230041.html
Copyright © 2020-2023  润新知