Leetcode # 66. Más uno (solución C ++)

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

gráfico LR A [¿Cuántos casos más 1] A -> B [1 2 3 4 más 1 final, un equipaje de menos] A -> C [1 9 9 9 carry existe, pero el resultado sigue siendo cuatro] A - > d [9 9 9 9 presente el acarreo, y los bits de acarreo más 1 causa]

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;
    }
};

Supongo que te gusta

Origin www.cnblogs.com/Justdocument/p/12596336.html
Recomendado
Clasificación