题解 | #进制转换#

进制转换

http://www.nowcoder.com/practice/2cc32b88fff94d7e8fd458b8c7b25ec1

描述

题目描述

给定我们一个十进制数, 然后给定我们要转换的一个进制, 让我们输出转换后的一个结果

样例解释

首先样例输入是

7, 2

让我们把十进制数的77转换为我们二进制的数, 那么我们最后的输出就是

111

20220212111418

题解

解法一: 取巧做法

实现思路

我们直接使用我们JavaJava里面自带的进制转换函数, 但是这里注意一个问题, 他返回的字母是小写的, 我们要转换为大写

代码实现

import java.util.*;


public class Solution {
    public String solve (int M, int N) {
        return Integer.toString(M ,N).toUpperCase();
    }
}

时空复杂度分析

时间复杂度: O(nm)O(\log_nm)

理由如下: 通过阅读源码可以知道, 其实它本质就是手动实现了一个除NN取余的过程

空间复杂度: O(1)O(1)

理由如下: 我们除了结果的那个字符串之外的所有变量都是常数级别的

解法二: 手动实现取余操作

实现思路

我们先是判断正负, 如果是正数直接一直取模, 负数先转为正数再判断

代码实现

class Solution {
    string turn = "0123456789ABCDEF";

   public:
    string solve(int M, int N) {
        if (M == 0) return 0;
        // 如果是0直接返回
        string res = "";
        // 答案字符串
        bool flag = false;
        // 记录是不是负数
        if (M < 0) {
            flag = true;
            M = abs(M);
        }
        // 如果是负数转为正数
        while (M) {
            res += turn[M % N];
            M /= N;
        }
        // 对N取模
        if (flag) res += "-";
        reverse(res.begin(), res.end());
        return res;
    }
};

时空复杂度分析

时间复杂度: O(nm)O(\log_nm)

理由如下: 我们其实进行了(nm)(\log_nm)次操作,除nn取余

空间复杂度: O(1)O(1)

理由如下: 我们除了结果的那个字符串之外的所有变量都是常数级别的

机试题目题解 文章被收录于专栏

主要是机试题目的题目讲解和做法

全部评论

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务