1. 程式人生 > 其它 >CSS HTML jQuery 實現嗶哩嗶哩頭部移動冬.日夜時差圖

CSS HTML jQuery 實現嗶哩嗶哩頭部移動冬.日夜時差圖

題意

給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。

注意:

  • 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−2^31, 2^31 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。

示例

示例 1:

輸入:x = 123
輸出:321

示例 2:

輸入:x = -123
輸出:-321

示例 3:

輸入:x = 120
輸出:21

示例 4:

輸入:x = 0
輸出:0

提示:

  • -2^31 <= x <= 2^31 - 1

出處

連結:https://leetcode-cn.com/problems/reverse-integer

思路

這題假如是個小學一年級的期末考試題,我們大概會這麼做,從右邊往左邊讀然後依次寫下來,如果讀到最後一個是“-”減號,我們就把它放到寫下數字的最前面。言下之意就是,我不要把它看成數字處理,我把它看成字串,然後一翻轉。這裡考慮下帶不帶負號,假設帶上吧,那你就要考慮最後那位是不是“-”了,如果不帶吧,那你就要判斷它原值是正數還是負數了。

這裡需要注意的是在 Javascript 語言中,Number 型別的範圍是[-2^53 - 1, 2^53 - 1],所以如果你轉換成字串處理,你是感受不到溢位的,需要去人肉判斷一波,該值是否在題意給定的[−2^31, 2^31 − 1]區間。除此之外,Javascript 的字串中並沒有字串反轉的 API,但是有陣列反轉的 API,所以曲線救國,就先轉成字串然後轉成陣列反轉再轉回字串。這個是完全根據 Javascript 語言特性和小學生思維的解法寫的。

當然啦,你也可以按照數字去解題,如果原值不為 0,將原值對於 10 取其餘數塞到新組成的字串的後面,新的原值等於原值整除 10, 前提你還是要先判斷有沒有溢位,然後該值的正負性。然後如果該值不為 0,要去掉開頭的 0, 如示例 3 所示.

程式碼

/**
 * @param {number} x
 * @return {number}
 */
const reverse = function(x) {
    const str = Math.abs(x).toString();
    const str_reverse = str.split('').reverse().join('');
    return x >= 0 ? Number(str_reverse) > Math.pow(2, 31) - 1 ? 0 : Number(str_reverse) : -Number(str_reverse) < Math.pow(-2, 31) ? 0 : -Number(str_reverse);
};

export default reverse;

測試

import twoSum from '../../code/leetcode/7';

describe('test function reverse:', () => {

    test('test case x = 123', () => {
        const res = twoSum(123);
        expect(res).toBe(321);
    });

    test('test case x = -123', () => {
        const res = twoSum(-123);
        expect(res).toBe(-321);
    });

    test('test case x = 120', () => {
        const res = twoSum(120);
        expect(res).toBe(21);
    });

    test('test case x = 0', () => {
        const res = twoSum(0);
        expect(res).toBe(0);
    });

    test('test case x = 1534236469', () => {
        const res = twoSum(1534236469);
        expect(res).toBe(0);
    });
})

思考

  • 就上面提到的用數字取餘數的解法,有興趣的同學可以取試下

  • 題目中給出的區間具體值是多大2^31-1=2147483647,-2^31=-2147483648

參考

JS 的 Number 型別: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number

說明

本文首發於 GitHub 倉庫https://github.com/ataola/coding,線上閱讀地址:https://zhengjiangtao.cn/coding/,轉載請註明出處,謝謝!