enlaces a los temas: https://leetcode-cn.com/problems/plus-one/
Uno, Título Descripción
Dada una matriz de enteros no vacío no negativo de enteros representado, sobre la base del número más uno.
La mayoría dígito significativo almacenado en la primera matriz, cada elemento de las tiendas de array sólo un solo dígito.
Es posible suponer que, además del número entero 0, el número entero no comienza con un cero.
示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
En segundo lugar, la solución
9,9,9,9
Se contempla que carry después de añadir 1, y generar nueva situación digital de sólo una es 9 por .
Así que esto puede escribirse por separado como un caso especial.
1,2,3,4 y 1,9,9,9
Después de resolver el primer caso especial, podemos asegurar que otras circunstancias no generarán un nuevo bit (que resultó ser unos pocos unos pocos).
El establecimiento de un puntero p volver travesía virtual al frente.
dígitos [p] + sólo menos de o igual a 1 1
Si el dígito [p-] 1 == 10 , y luego dejar dígitos [p] = 0, y sea p -, y uno que haga lo mismo antes de la operación de hacer.
Si el dígito [p-] 1! = 10 , y luego dejar dígitos [p] = dígitos [p ] 1, entonces podemos terminar el ciclo
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int len = digits.size();
// 9..9
//遍历一遍digits
//如果存在不等于9的位,flag = 0
//否则flag再循环结束的时候会保持1不变
int flag = 1;
for(int i = 0 ; i < len ; i++)
if(digits[i] != 9){
flag = 0;
break;
}
if(flag){ //确认是9..9的格式
digits[0] = 1;
for(int i = 1; i < len ;i++)
digits[i] = 0;
digits.push_back(0);
return digits;
}
//1234 && 1999
//设立p指针从最后以为向 ← 遍历
//temp用来保存digits[p]+1
//再次用到flag变量,如果在计算过程中没有进位(temp!=10),则可以提前结束循环
int p = len - 1;
int temp;
flag = 1;
while(flag && p >= 0){
temp = digits[p] + 1;
digits[p] = temp%10;
if(temp != 10) flag = 0;
p--;
}
return digits;
}
};