zoukankan      html  css  js  c++  java
  • 405. Convert a Number to Hexadecimal

    题目:

    Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s complement method is used.

    Note:

    1. All letters in hexadecimal (a-f) must be in lowercase.
    2. The hexadecimal string must not contain extra leading 0s. If the number is zero, it is represented by a single zero character '0'; otherwise, the first character in the hexadecimal string will not be the zero character.
    3. The given number is guaranteed to fit within the range of a 32-bit signed integer.
    4. You must not use any method provided by the library which converts/formats the number to hex directly.

    Example 1:

    Input:
    26
    
    Output:
    "1a"
    

    Example 2:

    Input:
    -1
    
    Output:
    "ffffffff"

    链接:https://leetcode.com/problems/convert-a-number-to-hexadecimal/#/description

    3/22/2017

    这道题思路很简单,但是写起来有点啰嗦。

    注意:

    1. StringBuilder.substring()返回的是String,不是StringBuilder!

    2. 判断StringBuilder的值是否是“”:ret.toString().equals("")。需要先变为String才可以

     1 public class Solution {
     2     public String toHex(int num) {
     3         StringBuilder sb = new StringBuilder();
     4         String tmp = new String();
     5         StringBuilder ret = new StringBuilder();
     6         HashMap<String, String> lookup = new HashMap<String, String>();
     7         lookup.put("0000", "0");
     8         lookup.put("0001", "1");
     9         lookup.put("0010", "2");
    10         lookup.put("0011", "3");
    11         lookup.put("0100", "4");
    12         lookup.put("0101", "5");
    13         lookup.put("0110", "6");
    14         lookup.put("0111", "7");
    15         lookup.put("1000", "8");
    16         lookup.put("1001", "9");
    17         lookup.put("1010", "a");
    18         lookup.put("1011", "b");
    19         lookup.put("1100", "c");
    20         lookup.put("1101", "d");
    21         lookup.put("1110", "e");
    22         lookup.put("1111", "f");
    23 
    24         int c = 1;
    25         for (int i = 0; i < 32; i++) {
    26             if ((num & c) == c) sb.append('1');
    27             else sb.append('0');
    28             c <<= 1;
    29         }
    30         sb.reverse();
    31         boolean leading = true;
    32         for (int i = 0; i < 32; i+=4) {
    33             tmp = sb.substring(i, i+4);
    34             if (tmp.equals("0000") && leading) continue;
    35             leading = false;
    36             ret.append(lookup.get(tmp));
    37         }
    38         if (ret.toString().equals("")) return "0";
    39         return ret.toString();
    40     }
    41 }

    看别人的解法很有收获,其实不需要借用2进制变为16进制,直接用16进制的数组map就可以了,注意这时按位与也要变成和15进行

     1 public class Solution {
     2     
     3     char[] map = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
     4     
     5     public String toHex(int num) {
     6         if(num == 0) return "0";
     7         String result = "";
     8         while(num != 0){
     9             result = map[(num & 15)] + result; 
    10             num = (num >>> 4);
    11         }
    12         return result;
    13     }
    14     
    15     
    16 }

    讨论:https://discuss.leetcode.com/category/531/convert-a-number-to-hexadecimal

    看这道题想起来一个问题,经常有输入n的问题,有没有想过什么时候用从n减来计算,什么时候从start(0或1或其他)计算到n呢?

  • 相关阅读:
    cad怎么样创建动态块
    块定义从一个图形传到当前图形
    AutoCAD200X\Support\acad.lsp 启动时自动加载dll
    菜单变灰
    CAD实体双击弹出自定义窗体,可根据扩展数据(通用)
    转载:双击实体弹出对话框(重载AcDbDoubleClickEdit)
    当前已保存的用户坐标系坐标点到世界坐标系的转换
    Windows下编译PHP的C扩展
    flexpaper使用介绍
    IE6 png处理
  • 原文地址:https://www.cnblogs.com/panini/p/6608986.html
Copyright © 2011-2022 走看看