Leetcode Java Convert a Number to Hexadecimal

업데이트:

문제

Link

코드

class Solution {

  public String toHex(int num) {
    if (num == 0) {
      return "0";
    } else {
      StringBuilder sb = new StringBuilder();
      while (num != 0) {
        int n = num & 0xf;
        n += n < 0xa ? '0' : 'a' - 10;
        sb.append((char) n);
        num >>>= 4;
      }
      return sb.reverse().toString();
    }
  }

}

결과

Link

설명

  1. 주어진 정수 num을 이용하여 16진수 표현 문자열을 반환하는 문제이다.
    • 답변 문자열의 모든 문자는 소문자이고, num이 0인 경우를 제외하고 문자열 내 0을 제외하고 작성한다.
  2. num이 0인 경우, “0”을 주어진 문제의 결과로 반환한다.

  3. num이 0이 아닌 경우, 아래를 수행한다.
    • 16진수 표현을 저장할 sb를 StringBuilder로 초기화한다.
      • 동적 문자열의 생성시, 효율적인 메모리 사용을 위해 StringBuilder를 사용한다.
    • num이 0이 아닐 때 까지 아래를 반복하여 sb에 값을 넣어준다.
      • n에 num과 0xf(15)의 AND(&) 비트 연산 수행 결과를 넣어준다.
      • n에 n이 0xa(10)보다 작은 경우 0, 같거나 큰 경우 $’a’ - 10$을 더해준다.
      • sb에 n을 문자열로 변환한 값을 넣아주고, num의 비트를 우측으로 4칸 이동시킨다.
    • 16진수 표현 문자열을 역순으로 저장한 sb를 다시 반대로 전환하여 문자열로 변환 후 주어진 문제의 결과로 반환한다.
      • StringBuilder의 insert(int offset, char c) 메서드는 offset까지 포인터를 이동하여 c를 삽입하고 해당 위치 값들을 뒤로 이동시키기 때문에, append(char c) 메서드와 reverse()을 활용하는 것이 시간 복잡도가 더 낮아진다.

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기