Số đối xứng (Palindrome Number)
9. Palindrome Number
Đề bài
Hãy xác định một số nguyên x có phải là số đối xứng (palindrome) hay không.
Một số nguyên được gọi là palindrome nếu đọc từ trái sang phải hay từ phải sang trái đều giống nhau.
Ví dụ 1:
Input: 121 Output: true
Ví dụ 2:
Input: -121 Output: false Explanation: Đọc từ trái sang phải là -121, còn từ phải sang trái sẽ thành 121- nên không đối xứng.
Ví dụ 3:
Input: 10 Output: false Explanation: Đọc ngược sẽ là 01 (tức 1), nên không đối xứng.
Follow up:
Bạn có thể giải bài này không cần chuyển số sang chuỗi không?
Ràng buộc:
Tóm tắt đề
Trả về true nếu x là palindrome, ngược lại trả về false.
Các trường hợp cần chú ý:
- Số âm luôn không đối xứng (vì có dấu
-). - Số có chữ số cuối là
0(nhưng khác0) luôn không đối xứng, vì số đảo sẽ có0ở đầu.
Ý tưởng
Trong code bên dưới có 2 cách:
- Cách 1 (không dùng chuỗi): Tách từng chữ số bằng
% 10và/ 10, lưu vào mảng, sau đó so sánh đối xứng hai đầu. - Cách 2 (dùng chuỗi): Đổi sang chuỗi rồi so sánh ký tự đối xứng hai đầu.
Code
package leetcode import "strconv" // Cách 1: không chuyển sang chuỗi func isPalindrome(x int) bool { if x < 0 { return false } if x == 0 { return true } if x%10 == 0 { return false } arr := make([]int, 0, 32) for x > 0 { arr = append(arr, x%10) x = x / 10 } sz := len(arr) for i, j := 0, sz-1; i <= j; i, j = i+1, j-1 { if arr[i] != arr[j] { return false } } return true } // Cách 2: chuyển số sang chuỗi rồi kiểm tra func isPalindrome1(x int) bool { if x < 0 { return false } if x < 10 { return true } s := strconv.Itoa(x) length := len(s) for i := 0; i <= length/2; i++ { if s[i] != s[length-1-i] { return false } } return true }