1. 程式人生 > 實用技巧 >LeetCode十進位制數轉十六進位制數Swift

LeetCode十進位制數轉十六進位制數Swift

注意:給定的數確保在32位有符號整數範圍內。

示例 1:

輸入:
26

輸出:
"1a"

示例 2:

輸入:
-1

輸出:
"ffffffff"

思路:

class Solution {
    func toHex(_ num: Int) -> String {
        var num = num
        var resnum = 0
        let hex = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"]
        var res = ""
        if
num == 0 { return "0" } while num != 0 && resnum < 8 { res = hex[num & 15] + res num >>= 4 resnum += 1 } return res } }

備註:

核心思想,利用二進位制轉十六進位制,使用位運算,每4位,對應1位16進位制數字。

num & 15 取num二進位制的最右側的4位,類似 num & 1 取num二進位制的最右側的1位。

二進位制0000-1111 正好對映十六進位制的0-f。

正數,右移左側補0,負數,右移左側補1。

二進位制是32位有符號數,4位右移一次,所以轉為十六進位制右移8次。