Back home

ARTES #030

ARTES #030

##ARTES 030

este es el articulo 30

ARTES es una actividad iniciada por 由左耳朵耗子--陈皓: Haga al menos una pregunta sobre el algoritmo leetcode cada semana, lea y comente al menos un artículo técnico en inglés, aprenda al menos una habilidad técnica y comparta un artículo con opiniones y pensamientos. (Es decir, Algoritmo, Revisión, Sugerencia y Compartir se denominan ARTS) y persisten durante al menos un año.

Pregunta sobre el algoritmo del algoritmo

7. Inversión de enteros

Dificultad: Fácil

Dado un entero de 32 bits con signo, es necesario invertir cada bit del entero.

Ejemplo 1:

输入: 123
输出: 321

** Ejemplo 2:**

输入: -123
输出: -321

Ejemplo 3:

输入: 120
输出: 21

Nota:

Suponiendo que nuestro entorno solo puede almacenar enteros con signo de 32 bits, el rango de valores es [−2<sup>31</sup>, 2<sup>31 </sup>− 1]. Siga esta suposición y devuelva 0 si el número entero se desborda después de la inversión.

Solución

Idioma: C

int reverse(int x) {
    long temp,result=0;;
    if(x>1534236461||x>=2147483642||x<(-2147483641)) return 0;
    while(x){
        temp=x%10;
        x=x/10;
        result=result*10+temp;
    }
    
    if(result>2147483642||result<(-2147483641)) return 0;
    return result;
}
int reverse(int x) {
      long temp,result=0;
    while(x){
        temp=x%10;
        x=x/10;
        result=result*10+temp;
    }
    
    if(result>INT_MAX||result<INT_MIN) return 0;
    return result;
}

8. Entero de conversión de cadena (atoi)

Dificultad: Media

Implemente una función atoi para que pueda convertir una cadena en un número entero.

Primero, la función descarta los espacios iniciales inútiles según sea necesario hasta que encuentre el primer carácter que no sea un espacio.

Cuando el primer carácter no nulo que encontramos es un signo positivo o negativo, el símbolo se combina con tantos dígitos consecutivos como sea posible como signo positivo o negativo del número entero; si el primer carácter no nulo es un número, se combina directamente con los caracteres numéricos consecutivos posteriores para formar un número entero.

La cadena también puede contener caracteres adicionales después de la parte entera válida. Estos caracteres pueden ignorarse y no deberían tener ningún efecto en la función.

Nota: No es necesario convertir su función si el primer carácter que no sea un espacio en la cadena no es un carácter entero válido, la cadena está vacía o la cadena contiene solo espacios en blanco.

En cualquier caso, si la función no puede realizar una conversión válida, devuelve 0.

Descripción:

Suponiendo que nuestro entorno solo puede almacenar enteros con signo de 32 bits, el rango de valores es [−2<sup>31</sup>, 2<sup>31 </sup>− 1]. Si el valor excede este rango, qing devuelve INT_MAX (2<sup>31 </sup>− 1) o INT_MIN (−2<sup>31</sup>).

Ejemplo 1:

输入: "42"
输出: 42

Ejemplo 2:

输入: "   -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
     我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

Ejemplo 3:

输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。

Ejemplo 4:

输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
     因此无法执行有效的转换。```

**Ejemplo 5:**

输入: “-91283472332” 输出: -2147483648 解释: 数字 “-91283472332” 超过 32 位有符号整数范围。   因此返回 INT_MIN (−231) 。



#### Solución

Idioma: **C**

```c
#include "limits.h"
int myAtoi(char* str) {
    long  temp = 0;
   const char *ptr = str;  //ptr保存str字符串开头
    while (*str) {
        if (*str == ' ') {
             str++;
            continue;
        }
        
        if (*str == '-') {
            str++;
            long tem = 0;
            while (*str) {
                if (*str>= '0' && *str<= '9') {
                    tem= tem * 10 + (*str - '0');
                     if(-tem<INT_MIN)
                         return INT_MIN;
                    
                    
                    str++;
                    continue;
                }
                else{
                    return -tem;
                }
            }
            return -tem;
        }
        else if(*str == '+'){
            str++;
            long tem = 0;
            while (*str) {
                if (*str>= '0' && *str<= '9') {
                    tem= tem * 10 + (*str - '0');
                    if(tem> INT_MAX)
                        return INT_MAX;
                    
                    str++;
                    continue;
                }
                else{
                    return tem;
                }
            }
            return tem;
        }
        else{
            
         
            int tem = 0;
            while (*str) {
                if (*str>= '0' && *str<= '9') {
                    tem= tem * 10 + (*str - '0');
                       str++;
                    
                    if(tem> INT_MAX)
                        return INT_MAX;
                    
                    continue;
                }
                else{
                    return tem;
                }
            }
            return tem;
       
        }
        
        break;
    }
    
    return 0;
}

Se aprobó el primer envío, pero el código era feo.

Este es el código después de ordenar:

int myAtoi(char* str) {
    while (*str) {
        if (*str == ' ') {
             str++;
            continue;
        }
        
        if(*str == '-' ||  *str == '+' || (*str>= '0' && *str<= '9')){
            int f=1;
            if ( *str == '-') {
                f=-1;
            }
            
            if (*str == '-' ||  *str == '+') {
                str++;
            }
            
            
            long tem = 0;
            while (*str) {
                if (*str>= '0' && *str<= '9') {
                    tem= tem * 10 + (*str - '0');
                    
                    if (f==1) {
                        if(tem> INT_MAX)
                            return INT_MAX;
                    }
                    else{
                        if(-tem<INT_MIN)
                             return INT_MIN;
                    }
                    
                    
                    
                    str++;
                    continue;
                }
                else{
                    return tem * f;
                }
            }
            return tem * f;
            
        }
        else{
            return 0;
        }
    }
    return 0;
}

El código es más corto, pero no tan fácil de entender como el primero.

Revisión

https://dandan2009.github.io/2019/04/25/ios-architecture-patterns/ Este artículo realiza un análisis comparativo de MVC, MVP, MVVM y VIPER, arquitecturas comúnmente utilizadas para el desarrollo de iOS.

Consejos

Los siguientes agentes UIGestureRecognizer pueden resolver el problema de los conflictos de gestos:

//Método llamado al iniciar el reconocimiento de gestos. Devolver NO finalizará el reconocimiento y ya no activará gestos. Uso: el reconocimiento de gestos se puede utilizar en la posición especificada por el control.

  • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer deberíaReceiveTouch:(UITouch *)touch { devolver SÍ; }

// Si se admite la activación de múltiples gestos, devuelva SÍ, luego varios gestos pueden activar el método al mismo tiempo, devuelva NO, es mutuamente excluyente. // Si varios reconocedores de gestos pueden reconocer juntos y si el reconocimiento de gestos de un control bloquea el reconocimiento de gestos para que no continúe propagándose hacia abajo. La devolución predeterminada es NO; si es SÍ, después de que el objeto superior de la cadena de respuesta activa el reconocimiento del gesto, si el objeto inferior también agrega el gesto y lo reconoce con éxito, continuará ejecutándose; de ​​lo contrario, no continuará propagándose después de que se reconozca el objeto superior. -(BOOL)gestureRecognizer:(UIGestureRecognizer*) gestoRecognizer deberíaRecognizeSimultaneousWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer{

}

Compartir

Estoy renovando una casa recientemente y planeo hacer el agua y la electricidad yo mismo. El agua ya se ha hecho. Mi experiencia después de hacerlo es que parece difícil hacerlo, pero no se puede decir que sea difícil. Aunque sea la primera vez que lo hago, siempre suceden cosas inesperadas. Por ejemplo, cuando se utiliza un termofusor para controlar la tubería, es necesario controlar la temperatura. Al principio, tomé algunas pipas de desecho y las probé con anticipación. Algunas estaban dobladas y otras planchadas. El proceso fue un poco tortuoso, pero los resultados aun así fueron satisfactorios. De hecho, hacer tuberías de agua es lo mismo que hacer desarrollo, ambos requieren experiencia.