SENI #030
SENI #030
SENI 030
Ini adalah pasal 30
SENI adalah kegiatan yang diprakarsai oleh
由左耳朵耗子--陈皓: Kerjakan setidaknya satu pertanyaan algoritma leetcode setiap minggu, baca dan komentari setidaknya satu artikel teknis berbahasa Inggris, pelajari setidaknya satu keterampilan teknis, dan bagikan artikel yang berisi opini dan pemikiran. (Artinya, Algoritma, Review, Tip, dan Share disebut sebagai SENI) dan bertahan setidaknya selama satu tahun.
Pertanyaan algoritma algoritma
7. Pembalikan bilangan bulat
Kesulitan: Mudah
Mengingat bilangan bulat bertanda 32-bit, Anda perlu membalik setiap bit dalam bilangan bulat.
Contoh 1:
输入: 123
输出: 321
Contoh 2:
输入: -123
输出: -321
Contoh 3:
输入: 120
输出: 21
Catatan:
Dengan asumsi bahwa lingkungan kita hanya dapat menyimpan bilangan bulat bertanda 32-bit, rentang nilainya adalah [−2<sup>31</sup>, 2<sup>31 </sup>− 1]. Harap ikuti asumsi ini dan kembalikan 0 jika bilangan bulat meluap setelah inversi.
Solusi
Bahasa: 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. Bilangan bulat konversi string (atoi)
Kesulitan: Sedang
Harap terapkan fungsi atoi sehingga dapat mengubah string menjadi bilangan bulat.
Pertama, fungsi tersebut membuang karakter spasi utama yang tidak berguna seperlunya hingga ia menemukan karakter non-spasi pertama.
Jika karakter bukan nol pertama yang kita temukan adalah tanda positif atau negatif, simbol tersebut digabungkan dengan sebanyak mungkin digit berurutan sebanyak tanda positif atau negatif dari bilangan bulat; jika karakter bukan nol pertama adalah angka, maka karakter tersebut langsung digabungkan dengan karakter numerik berurutan berikutnya untuk membentuk bilangan bulat.
String mungkin juga berisi karakter tambahan setelah bagian bilangan bulat yang valid. Karakter ini dapat diabaikan dan tidak berpengaruh pada fungsinya.
Catatan: Fungsi Anda tidak perlu dikonversi jika karakter non-spasi pertama dalam string bukan karakter bilangan bulat yang valid, string kosong, atau string hanya berisi karakter spasi putih.
Bagaimanapun, jika fungsi tidak dapat melakukan konversi yang valid, kembalikan 0.
Deskripsi:
Dengan asumsi bahwa lingkungan kita hanya dapat menyimpan bilangan bulat bertanda 32-bit, rentang nilainya adalah [−2<sup>31</sup>, 2<sup>31 </sup>− 1]. Jika nilainya melebihi rentang ini, qing mengembalikan INT_MAX (2<sup>31 </sup>− 1) atau INT_MIN (−2<sup>31</sup>).
Contoh 1:
输入: "42"
输出: 42
Contoh 2:
输入: " -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
Contoh 3:
输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
Contoh 4:
输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
因此无法执行有效的转换。```
**Contoh 5:**
输入: “-91283472332” 输出: -2147483648 解释: 数字 “-91283472332” 超过 32 位有符号整数范围。 因此返回 INT_MIN (−231) 。
#### Solusi
Bahasa: **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;
}
Pengajuan pertama berhasil, tetapi kodenya jelek
Ini kode setelah dirapikan:
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;
}
Kodenya lebih pendek, tetapi tidak semudah yang pertama untuk dipahami.
Ulasan
https://dandan2009.github.io/2019/04/25/ios-architecture-patterns/ Artikel ini melakukan analisis komparatif MVC, MVP, MVVM dan VIPER, arsitektur yang umum digunakan untuk pengembangan iOS.
Kiat
Agen UIGestureRecognizer berikut dapat mengatasi masalah konflik isyarat:
//Metode dipanggil saat memulai pengenalan isyarat. Mengembalikan TIDAK akan mengakhiri pengenalan dan tidak lagi memicu isyarat. Penggunaan: pengenalan isyarat dapat digunakan pada posisi yang ditentukan oleh kontrol.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer seharusnyaReceiveTouch:(UITouch *)sentuh { kembali YA; }
//Apakah pemicuan multi-gestur didukung, kembalikan YA, maka beberapa gerakan dapat memicu metode secara bersamaan, kembalikan TIDAK, ini saling eksklusif. //Apakah beberapa pengenal isyarat diperbolehkan untuk mengenali secara bersamaan, dan apakah pengenalan isyarat dari suatu kontrol menghalangi pengenalan isyarat agar tidak terus menyebar ke bawah. Pengembalian default adalah TIDAK; jika YA, setelah objek atas dari rantai responden memicu pengenalan isyarat, jika objek bawah juga menambahkan isyarat dan berhasil mengenalinya, maka akan terus dijalankan, jika tidak maka tidak akan terus menyebar setelah objek atas dikenali. -(BOOL)gestureRecognizer:(UIGestureRecognizer*) GestureRecognizer harusRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*)otherGestureRecognizer{
}
Bagikan
Saya sedang merenovasi rumah baru-baru ini, dan saya berencana untuk mengerjakan sendiri air dan listrik. Airnya sudah jadi. Pengalaman saya setelah melakukannya sepertinya sulit untuk dilakukan, namun tidak bisa dikatakan sulit. Meski ini pertama kalinya saya melakukannya, beberapa hal tak terduga selalu terjadi. Misalnya, saat menggunakan peleburan panas untuk mengambil alih pipa, Anda harus mengontrol suhunya. Pada awalnya saya mengambil beberapa pipa bekas dan mencobanya terlebih dahulu. Ada yang bengkok dan ada yang disetrika. Prosesnya memang agak berliku-liku, namun hasilnya tetap memuaskan. Padahal, mengerjakan pipa air sama saja dengan melakukan pembangunan, sama-sama membutuhkan pengalaman.
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