2020年3月11日 星期三

[LeetCode] 7. Reverse Integer 解題思路* (Easy)



給一個 32bit 有正負號的整數,返回反轉過後的數字。



LeetCode 題目連結


https://leetcode.com/problems/reverse-integer

題目

Given a 32-bit signed integer, reverse digits of an integer.
Example 1:
Input: 123
Output: 321
Example 2:
Input: -123
Output: -321
Example 3:
Input: 120
Output: 21
Note:
Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231,  231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.


Accept 作法

要考慮溢位問題,還有負號永遠擺前面,以及遇到 0 在前面反轉後都不顯示。


Runtime: 2 ms
Memory: 36.9 MB

Java
class Solution {
   class Solution {
    public int reverse(int x) {
        String intStr = String.valueOf(x);
        StringBuilder result = new StringBuilder();
        boolean isCons = false;
        for(int i = 0; i< intStr.length();i++){
            if(intStr.charAt(i) == '-'){
                result.append('-');
                isCons = true;
            }else{
                
                if(isCons){
                    if(intStr.charAt(intStr.length()  - i) != '-'){
                        result.append(intStr.charAt(intStr.length()  - i));
                    }
                    
                }else{
                    result.append(intStr.charAt(intStr.length() - 1 - i));
                }
                
            }
        }
        try{
            int resultInt = Integer.valueOf(result.toString());
             return resultInt;
        }catch(Exception e){
            return 0;
        }
        
    }
  }
}




官方的答案更簡單。我果然還是想的太冗長了。


class Solution {
    public int reverse(int x) {
        int rev = 0;
        while (x != 0) {
            int pop = x % 10;
            x /= 10;
            if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;
            if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;
            rev = rev * 10 + pop;
        }
        return rev;
    }
}




更多 LeetCode 相關資源



複習程式面試書籍


除了 LeetCode 練習外,我也入手了這本,題庫來自真正的面試,並非摘自教科書。它們反映出頂尖公司真正會出的題目,你可以藉此做好充分準備

需要的話可以看看,寫得很仔細。



書名:提升程式設計師的面試力:189道面試題目與解答




相關 LeetCode文章一律會放在 程式解題 標籤分類,歡迎持續追蹤。


沒有留言:

張貼留言