iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
佛心分享-刷題不只是刷題

只是單純想刷題XD系列 第 9

只是單純想刷題XD Day9

  • 分享至 

  • xImage
  •  

今天就來第9題吧~

題目

https://ithelp.ithome.com.tw/upload/images/20240921/20160320GMTspO2Ckb.jpg

題目翻譯

判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

解題思路

1.處理特殊情況:
(1)如果 x 是負數,直接返回 false,因為負數不可能是回文數。
(2)如果 x 不是 0 且最後一位數是 0(如 10、100 等),則返回 false,因為這些數字無法是回文數。
2.反轉一半的數字:
(1)使用 while (x > reversedHalf),每次取出 x 的最後一位,並加入到反轉後的數字 reversedHalf 中,同時將 x 的最後一位去掉。
(2)這樣可以只處理數字的一半,而不必將整個數字轉換為一個數列。
3.比較:
(1)當迴圈結束時,如果 x 和 reversedHalf 相等,或者 x 等於 reversedHalf / 10(處理奇數長度的情況),數字是回文,返回 true。
4.返回結果:
(1)如果兩部分數字不相等,返回 false;如果相等,則返回 true。

code

class Solution {
public:
    bool isPalindrome(int x) {
        // 負數不可能是回文數
        if (x < 0) return false;
        
        // 如果數字是0,或者最後一位是0且數字不為0,則不可能是回文
        if (x != 0 && x % 10 == 0) return false;

        int reversedHalf = 0;
        while (x > reversedHalf) {
            reversedHalf = reversedHalf * 10 + x % 10;  // 將數字的一半反轉
            x /= 10;  // 去掉數字的最後一位
        }

        // 當 x 等於反轉後的數字,或者當數字是奇數長度時,中間的數字無關緊要
        return x == reversedHalf || x == reversedHalf / 10;
    }
};


上一篇
只是單純想刷題XD Day8
下一篇
只是單純想刷題XD Day10
系列文
只是單純想刷題XD30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言