题目地址:
https://www.lintcode.com/problem/hex-conversion/description
给定一个十进制非负整数,将其转化为 k k k进制数,其中 k ∈ { 2 , 3 , . . . , 16 } k\in\{2,3,...,16\} k∈{2,3,...,16}。输出要求是字符串类型。
思路是用栈,将 n n n对 k k k取余,取余的结果入栈,然后对 n / k n/k n/k进行相同的操作,直到 n / k n/k n/k成为 0 0 0为止。最后从栈顶到栈底形成的数字即为所求。代码如下:
public class Solution {
/**
* @param n: a decimal number
* @param k: a Integer represent base-k
* @return: a base-k number
*/
public String hexConversion(int n, int k) {
// write your code here
String dig = "0123456789ABCDEF";
// 直接用一个StringBuilder当作栈来用
StringBuilder sb = new StringBuilder();
do {
sb.append(dig.charAt(n % k));
n /= k;
} while (n > 0);
// 最后要记得翻转一下
return sb.reverse().toString();
}
}
时空复杂度 O ( log n ) O(\log n) O(logn)。