整數(shù)反轉(zhuǎn)

題目

給你一個 32 位的有符號整數(shù) x ,返回將 x 中的數(shù)字部分反轉(zhuǎn)后的結(jié)果。
如果反轉(zhuǎn)后整數(shù)超過 32 位的有符號整數(shù)的范圍 [?231, 231 ? 1] ,就返回 0。
假設環(huán)境不允許存儲 64 位整數(shù)(有符號或無符號)。


示例 1:
輸入:x = 123
輸出:321


示例 2:
輸入:x = -123
輸出:-321


示例 3:
輸入:x = 120
輸出:21


示例 4:
輸入:x = 0
輸出:0


來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/reverse-integer

代碼

  • 第一想法轉(zhuǎn)字符串倒序
class Solution {
  int reverse(int x) {
    if (x == 0) return 0;
    int tmp = x > 0 ? x : x * -1;

    String string = tmp.toString();
    String pre = string[string.length - 1];
    String next = "0";
    var result = pre != "0" ? pre : "";

    for (var i = string.length - 2; i >= 0; i--) {
      pre = string[i + 1];
      if (string[i] != '0' || pre != 0 || next != '0') {
        result += string[i];
      }
      next = string[i];
    }
    int value = int.parse(result);
    if (value > pow(2, 31)) return 0;
    if (x < 0) value *= -1;
    return value;
  }
}
這結(jié)果一看就無了??
  • 套公式:x * 10 + y,舉個例子 123,需要返回 321,第一步 0 * 10 + 3 = 3,第二步 3 * 10 + 2 = 32,第三步 32 * 10 + 1 = 321。
class Solution {
  int reverse(int x) {
    //轉(zhuǎn)為正數(shù)
    int val = x >=0 ? x : -x;
    int res = 0;
    while (val != 0) {
      //取尾數(shù)
      int tmp = val % 10;
      //公式:x * 10 + y
      res = res * 10 + tmp;
      //邊界條件 pow(2, 31)
      if (res > 2147483648) return 0;
      val ~/= 10;
    }
    return x >= 0 ? res : -res;
  }
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容