Đảo ngược số nguyên (Reverse Integer)

7. Reverse Integer

Đề bài

Cho một số nguyên có dấu kiểu 32-bit, hãy đảo ngược các chữ số của nó.

Ví dụ 1:

Input: 123 Output: 321

Ví dụ 2:

Input: -123 Output: -321

Ví dụ 3:

Input: 120 Output: 21

Lưu ý: Giả sử môi trường chỉ lưu được số nguyên trong phạm vi 32-bit có dấu: [231,2311][−2^{31}, 2^{31} − 1]. Nếu số sau khi đảo bị tràn, hãy trả về 0.

Ràng buộc:

  • 231x2311-2^{31} \le x \le 2^{31} - 1

Tóm tắt đề

Với số nguyên x:

  • Đảo thứ tự các chữ số của x (giữ nguyên dấu âm/dương).
  • Bỏ qua các số 0 ở đầu (ví dụ 12021).
  • Nếu kết quả nằm ngoài [231,2311][−2^{31}, 2^{31} − 1] thì trả về 0.

Ý tưởng

  • Lặp khi x != 0, mỗi bước lấy chữ số cuối x % 10 rồi “ghép” vào kết quả tmp = tmp*10 + digit.
  • Sau khi đảo xong, kiểm tra tmp có nằm trong phạm vi 32-bit có dấu hay không; nếu không thì trả về 0.

Code

package leetcode func reverse7(x int) int { tmp := 0 for x != 0 { tmp = tmp*10 + x%10 x = x / 10 } if tmp > 1<<31-1 || tmp < -(1<<31) { return 0 } return tmp }