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.

 

Subscribe to see which companies asked this question

 

刚开始没有理解题意。意思事实上表示给你一个vector,这个vector将一个数字每一位拆分,例如,100就会变成[1,0,0];

让你把这个数加1,就100变成101,返回vector[1,0,1]

这个问题不难,有两个问题需要注意的:

一、给你一个vector,并不表示,每个vector的数字是0~9的,有可能是[1,10,1],事实上它是201。所以就是一个需要规格化的。

二、有可能出现第一个元素进位,那么就需要在vector的开始再加入一个元素,我在这里用到的是vector.insert(vector.begin(),val);

在这补充一下insert函数的用法:

insert() 函数有以下三种用法: 

在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器, 
在指定位置loc前插入num个值为val的元素 
在指定位置loc前插入区间[start, end)的所有元素 . 
举例: 

//创建一个vector,置入字母表的前十个字符 
vector <char> alphaVector; 
for( int i=0; i < 10; i++ ) 
  alphaVector.push_back( i + 65 ); 

//插入四个C到vector中 
vector <char>::iterator theIterator = alphaVector.begin(); 
alphaVector.insert( theIterator, 4, 'C' ); 

//显示vector的内容 
for( theIterator = alphaVector.begin(); theIterator != alphaVector.end(); theIterator++ ) 
  cout < < *theIterator; 

 

 1 class Solution {
 2 public:
 3     vector<int> plusOne(vector<int>& digits) {
 4         int s=digits.size();
 5         int n=0,j=0,r=0;
 6         digits[s-1]+=1;
 7         for(int i=s-1;i>=0;i--){
 8             if(digits[i]>=10){
 9                 n=digits[i];
10                 digits[i]=0;
11                 j=i;
12                 while(n!=0){
13                     r=n%10;
14                     if(j>=0) digits[j--]+=r;
15                     else digits.insert(digits.begin(),r);
16                     n/=10;
17                 }
18             } 
19         }
20         return digits;
21     }
22 };

 

posted @ 2015-11-26 12:38  0giant  阅读(144)  评论(0编辑  收藏  举报