🚩传送门:牛客题目

题目

给定一个十进制数 [NC]112. 进制转换 - 图1 ,以及需要转换的进制数[NC]112. 进制转换 - 图2 ,将十进制数 [NC]112. 进制转换 - 图3 转化为 [NC]112. 进制转换 - 图4 进制数。

  • [NC]112. 进制转换 - 图5 大于 10 以后, 用大写字母表示大于 10 的一位

    'A' 表示此位为 10'B' 表示此位为 11'B'表示为15

  • [NC]112. 进制转换 - 图6 为负数,应在结果中保留负号

要求:空间复杂度 [NC]112. 进制转换 - 图7 ,时间复杂度[NC]112. 进制转换 - 图8

解题思路:模拟

[NC]112. 进制转换 - 图9[NC]112. 进制转换 - 图10 取余,然后逆序

复杂度分析

时间复杂度:[NC]112. 进制转换 - 图11

空间复杂度:[NC]112. 进制转换 - 图12

官方代码

  1. public class Solution {
  2. public String solve (int M, int N) {
  3. if(M==0)return "0";
  4. String reference="0123456789ABCDEF";
  5. StringBuffer ans=new StringBuffer();
  6. boolean f=true;
  7. //1. 负数变正
  8. if(M<0){
  9. M=-M;
  10. f=false;
  11. }
  12. //2. 取余相除
  13. while(M!=0){
  14. ans.append(reference.charAt(M%N));
  15. M/=N;
  16. }
  17. //3. 负数加负号
  18. if(!f) ans.append("-");
  19. //4. 逆序
  20. return ans.reverse().toString();
  21. }
  22. }