leetcode題目總結 --- 迴文數
阿新 • • 發佈:2020-12-10
1 題目
判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
2 解法
2.1 初版
2.1.1 思路
由於題目不允許把數直接轉化為字串, 所以想到了把數的每一位轉換為雙向陣列, 然後對頭尾一點一點比較
2.1.2 程式碼
bool isPalindrome(int x) { if (x < 0) { return false; } deque<int> tDeque; while (x) { tDeque.push_back(x % 10); x /= 10; } while (tDeque.size() > 1) { int front = tDeque.front(); int back = tDeque.back(); if (front == back) { tDeque.pop_front(); tDeque.pop_back(); } else { return false; } } return true; }
2.1.3 結果
效能屬實不咋地:
2.2 第二版
2.2.1 思路
pop出來是不是費效能, 所以直接用vector, 不pop了
2.2.2 程式碼
bool isPalindrome(int x) { if (x < 0) { return false; } vector<int> tVec; while (x) { tVec.push_back(x % 10); x /= 10; } int left = 0; int right = tVec.size() - 1; while (left < right) { if (tVec[left] == tVec[right]) { left ++; right --; } else { return false; } } return true; }
2.2.3 結果
這還不如之前的呢......
2.3 答案解法
2.3.1 思路
只翻轉一半, 也就是說如果後一半翻轉之後與剩下的前一半看看是否相等.
2.3.2 程式碼
bool isPalindrome(int x) { if (x < 0 || (x > 0 && x % 10 == 0)) { return false; } int reverseNumber = 0; while (reverseNumber < x) { reverseNumber = reverseNumber * 10 + x % 10; x /= 10; } if (reverseNumber > x) { reverseNumber /= 10; } return (reverseNumber == x); }
2.3.3 效能
也不咋地