ARTES #030
ARTES #030
ARTES 030
Este é o artigo 30
ARTS é uma atividade iniciada por
由左耳朵耗子--陈皓: Faça pelo menos uma pergunta sobre o algoritmo leetcode toda semana, leia e comente pelo menos um artigo técnico em inglês, aprenda pelo menos uma habilidade técnica e compartilhe um artigo com opiniões e pensamentos. (Ou seja, Algoritmo, Revisão, Dica e Compartilhamento são chamados de ARTS) e persistem por pelo menos um ano.
Pergunta sobre algoritmo de algoritmo
7. Reversão de número inteiro
Dificuldade: Fácil
Dado um inteiro assinado de 32 bits, você precisa reverter cada bit do inteiro.
Exemplo 1:
输入: 123
输出: 321
Exemplo 2:
输入: -123
输出: -321
Exemplo 3:
输入: 120
输出: 21
Nota:
Supondo que nosso ambiente possa armazenar apenas números inteiros assinados de 32 bits, o intervalo de valores é [−2<sup>31</sup>, 2<sup>31 </sup>− 1]. Siga esta suposição e retorne 0 se o número inteiro estourar após a inversão.
Solução
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. Número inteiro de conversão de string (atoi)
Dificuldade: Média
Implemente uma função atoi para que ela possa converter uma string em um número inteiro.
Primeiro, a função descarta caracteres de espaço iniciais inúteis conforme necessário até encontrar o primeiro caractere sem espaço.
Quando o primeiro caractere não nulo que encontramos é um sinal positivo ou negativo, o símbolo é combinado com tantos dígitos consecutivos quanto possível quanto o sinal positivo ou negativo do inteiro; se o primeiro caractere não nulo for um número, ele será combinado diretamente com os caracteres numéricos consecutivos subsequentes para formar um número inteiro.
A string também pode conter caracteres extras após a parte inteira válida. Esses caracteres podem ser ignorados e não devem afetar a função.
Nota: Sua função não precisa ser convertida se o primeiro caractere sem espaço na string não for um caractere inteiro válido, se a string estiver vazia ou se contiver apenas caracteres de espaço em branco.
De qualquer forma, se a função não puder realizar uma conversão válida, retorne 0.
Descrição:
Supondo que nosso ambiente possa armazenar apenas números inteiros assinados de 32 bits, o intervalo de valores é [−2<sup>31</sup>, 2<sup>31 </sup>− 1]. Se o valor exceder esse intervalo, qing retornará INT_MAX (2<sup>31 </sup>− 1) ou INT_MIN (−2<sup>31</sup>).
Exemplo 1:
输入: "42"
输出: 42
Exemplo 2:
输入: " -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
Exemplo 3:
输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
Exemplo 4:
输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
因此无法执行有效的转换。```
**Exemplo 5:**
输入: “-91283472332” 输出: -2147483648 解释: 数字 “-91283472332” 超过 32 位有符号整数范围。 因此返回 INT_MIN (−231) 。
#### Solução
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;
}
O primeiro envio foi aprovado, mas o código ficou feio
Este é o código depois de arrumado:
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;
}
O código é mais curto, mas não tão fácil de entender quanto o primeiro.
Revisão
https://dandan2009.github.io/2019/04/25/ios-architecture-patterns/ Este artigo realiza uma análise comparativa de MVC, MVP, MVVM e VIPER, arquiteturas comumente utilizadas para desenvolvimento iOS.
Dicas
Os seguintes agentes UIGestureRecognizer podem resolver o problema de conflitos de gestos:
//Método chamado ao iniciar o reconhecimento de gestos. Retornar NÃO encerrará o reconhecimento e não acionará mais gestos. Uso: o reconhecimento de gestos pode ser usado na posição especificada pelo controle.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { retorne SIM; }
//Se o acionamento multigesto for suportado, retorne SIM, então vários gestos podem acionar o método ao mesmo tempo, retorne NÃO, é mutuamente exclusivo. //Se vários reconhecedores de gestos podem reconhecer juntos e se o reconhecimento de gestos de um controle impede que o reconhecimento de gestos continue a se propagar para baixo. O retorno padrão é NÃO; se for SIM, após o objeto superior da cadeia de resposta acionar o reconhecimento de gesto, se o objeto inferior também adicionar o gesto e reconhecê-lo com sucesso, ele continuará a ser executado, caso contrário, não continuará a se propagar após o objeto superior ser reconhecido. -(BOOL)gestureRecognizer:(UIGestureRecognizer*) gestoRecognizer deveReconhecerSimultaneamenteWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer{
}
Compartilhar
Estou reformando uma casa recentemente e pretendo cuidar da água e da eletricidade sozinho. A água já foi feita. Minha experiência depois de fazer isso é que parece difícil fazê-lo, mas não se pode dizer que seja difícil. Mesmo que seja a primeira vez que faço isso, sempre acontecem algumas coisas inesperadas. Por exemplo, ao usar um aparelho de fusão a quente para assumir o controle do tubo, é necessário controlar a temperatura. No início, peguei alguns cachimbos de sucata e experimentei-os com antecedência. Alguns foram dobrados e outros foram passados a ferro. O processo foi um pouco tortuoso, mas os resultados ainda foram satisfatórios. Na verdade, fazer tubulações de água é o mesmo que fazer desenvolvimento, ambos exigem experiência.
What to read next
Want more posts about ARTS?
Posts in the same category are usually the best next step for reading more on this topic.
View same categoryWant to keep following #iOS?
Tags are useful for related tools, specific problems, and similar troubleshooting notes.
View same tagWant to explore another direction?
If you are not sure what to read next, return to the homepage and start from categories, topics, or latest updates.
Back home