題目:
給出一個 32 位的有符号整數,你需要将這個整數中每位上的數字進行反轉。
注意:
假設我們的環境隻能存儲得下 32 位的有符号整數,則其數值範圍為 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢出那麼就傳回 0。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
首先拿到這道題的想法就是轉為字元串或者數組,然後計算完後再轉為數值。但想到了更簡單的方法,即:
%求餘數的值*10 + x/10的值,具體代碼如下:
var reverse = function(x) {
var rev = 0;
while(x!=0){
var pop = x%10;
if(x>0) x = Math.floor(x/10);
else if(x<0) x=Math.ceil(x/10);
rev = rev*10 + pop;
if(rev<Math.pow(-2,31) || rev>Math.pow(2,31)-1) return 0;
}
return rev;
};
有些細節需要注意:
1、對于正數來說,Math.floor向下取整,是以,0.6會等于0;Math.ceil向上取整,而對于負數來說,Math.ceil向上取整,是以,-0.6會等于-1。是以需要判斷x與0的大小,再決定用向上或向下。
2、Math.pow是求方,不能使用-2^31。
本文為作者關于LeetCode的解法
大神解法請自己搜尋