1. 程式人生 > >LeetCode演算法題-Convert a Number to Hexadecimal(Java實現)

LeetCode演算法題-Convert a Number to Hexadecimal(Java實現)

這是悅樂書的第219次更新,第231篇原創

01 看題和準備

今天介紹的是LeetCode演算法題中Easy級別的第86題(順位題號是405)。給定一個整數,寫一個演算法將其轉換為十六進位制。對於負整數,使用二進位制補碼方法。例如:

輸入:26
輸出:“1a”

輸入:-1
輸出:“ffffffff”

注意

  • 十六進位制(a-f)中的所有字母必須為小寫。

  • 十六進位制字串不得包含額外的前導0。如果數字為零,則由單個零字元“0”表示;否則,十六進位制字串中的第一個字元將不是零字元。

  • 保證給定數字適合32位有符號整數的範圍。

  • 您不得使用庫提供的任何方法將數字直接轉換或者格式化為十六進位制。

本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。

02 第一種解法

直接使用包裝類Integer的toHexString方法,將num轉為16進位制字串。

public String toHex(int num) {
    return Integer.toHexString(num);
}


03 第二種解法

此解法的思路來自於String toHexString(int i)的原始碼,先將16進位制所用到的字元放入一個字元陣列,從'0'到'f'依次排列,再定義一個字串。先將num和15進行與(&)運算,與運算的規則是同1為1,即將num轉為二進位制數和二進位制數1111做運算,得到的結果即為對應字元陣列中的第幾位字元,然後將num無符號右移4位,只要num不等於0,就一直迴圈計算。最後返回result。

核心思路是每次取出最右邊的四位進行與運算。

public String toHex2(int num) {
    if (num == 0) {
        return "0";
    }
    char[] ch = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    String result = "";
    while (num != 0) {
        result = ch[num&15] + result;
        num >>>= 4;
    }
    return result;
}


04 小結

演算法專題目前已連續日更超過兩個月,演算法題文章86+篇,公眾號對話方塊回覆【資料結構與演算法】、【演算法】、【資料結構】中的任一關鍵詞,獲取系列文章合集。

以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!