405. Convert a Number to Hexadecimal

LeetCode easy original: C# #array #bit-manipulation #csharp #easy #leetcode #string
El texto de la tarea se traduce del ruso para el idioma seleccionado. El código no cambia.

Если заgiven entero num, return строку, представляющую его шестнадцатеричное представление. Для отрицательных целых чисел используется метод дополнения до двух. Все буквы в строке ответа должны быть строчными, и в ответе не должно быть никаких ведущих нулей, кроме самого нуля. Примечание: Вам не разрешается использовать какие-либо встроенные библиотечные методы для непосредственного решения этой задачи.

Ejemplo:

Input: num = 26

Output: "1a"

C# solución

coincidente/original
public class Solution {
    public string ToHex(int num) {
        if (num == 0) return "0";
        char[] hexChars = "0123456789abcdef".ToCharArray();
        uint n = (uint)num;
        StringBuilder result = new StringBuilder();
        while (n > 0) {
            result.Append(hexChars[n % 16]);
            n /= 16;
        }
        char[] charArray = result.ToString().ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }
}

C++ solución

borrador automático, revisar antes de enviar
#include <bits/stdc++.h>
using namespace std;

// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
    public string ToHex(int num) {
        if (num == 0) return "0";
        char[] hexChars = "0123456789abcdef".ToCharArray();
        uint n = (uint)num;
        StringBuilder result = new StringBuilder();
        while (n > 0) {
            result.Append(hexChars[n % 16]);
            n /= 16;
        }
        char[] charArray = result.ToString().ToCharArray();
        Array.Reverse(charArray);
        return new string(charArray);
    }
}

Java solución

coincidente/original
public class Solution {
    public String toHex(int num) {
        if (num == 0) return "0";
        char[] hexChars = "0123456789abcdef".toCharArray();
        long n = num;
        if (num < 0) n += 1L << 32;
        StringBuilder result = new StringBuilder();
        while (n > 0) {
            result.append(hexChars[(int)(n % 16)]);
            n /= 16;
        }
        return result.reverse().toString();
    }
}

JavaScript solución

coincidente/original
function toHex(num) {
    if (num === 0) return "0";
    let hexChars = "0123456789abcdef";
    if (num < 0) num += 2 ** 32;
    let result = [];
    while (num > 0) {
        result.push(hexChars[num % 16]);
        num = Math.floor(num / 16);
    }
    return result.reverse().join('');
}

Python solución

coincidente/original
def to_hex(num):
    if num == 0:
        return "0"
    hex_chars = "0123456789abcdef"
    if num < 0:
        num += 2 ** 32
    result = []
    while num > 0:
        result.append(hex_chars[num % 16])
        num //= 16
    return ''.join(result[::-1])

Go solución

coincidente/original
package main

import (
    "fmt"
    "strings"
)

func toHex(num int) string {
    if num == 0 {
        return "0"
    }
    hexChars := "0123456789abcdef"
    if num < 0 {
        num += 1 << 32
    }
    result := []byte{}
    for num > 0 {
        result = append(result, hexChars[num%16])
        num /= 16
    }
    for i, j := 0, len(result)-1; i < j; i, j = i+1, j-1 {
        result[i], result[j] = result[j], result[i]
    }
    return string(result)
}

func main() {
    fmt.Println(toHex(26))
    fmt.Println(toHex(-1))
}

Algorithm

Определите, является ли number отрицательным. Если да, преобразуйте его в положительное number с помощью метода дополнения до двух. Для этого прибавьте к числу 2^32 и используйте битовую операцию И с маской 0xFFFFFFFF.

Создайте строку с шестнадцатеричными символами. Последовательно делите number на 16 и добавляйте соответствующий символ к результату, пока number не станет равным нулю.

Переreturn строку результата и удалите ведущие нули, если они есть. Если cadena пустая, return "0".

😎

Vacantes para esta tarea

Se muestran vacantes activas con etiquetas coincidentes.

Todas las vacantes
Todavía no hay vacantes activas.