zoukankan      html  css  js  c++  java
  • 加一

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

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

    你可以假设除了整数 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;
    }
    

      

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

  • 相关阅读:
    AOP第一个例子
    初学Spring
    MyBatis延迟加载,缓存的使用
    MyBatis关联查询
    MyBatis的基本操作(02)-----Seeeion.commit引起事务的提交,多条件查询,智能标签的应用,ResultMap结果映射
    Js练习题之查找字符串中出现最多的字符和个数
    Js练习题之字符串转驼峰
    Js笔试题之正则表达式
    Js笔试题之千分位格式化
    Js笔试题之parseInt()和.map()
  • 原文地址:https://www.cnblogs.com/LandyTan/p/12230041.html
Copyright © 2011-2022 走看看