LeetCode刷题笔记 算法中的数学问题 进制转换问题

504 七进制数

给定一个十进制整数,求它在七进制下的表示。

输入一个整数,输出一个字符串,表示其七进制。

输入: num = 100
输出: “202”
解释:100 的七进制表示法来源于 100 = 2 * 49 + 0 * 7 + 2 * 1。

解析:

进制转换类型的题,通常是利用除法和取模(mod)来进行计算,同时也要注意一些细节,如负数和零。如果输出是数字类型而非字符串,则也需要考虑是否会超出整数上下界。

class Solution {
    
    
public:
    string convertToBase7(int num) {
    
    
        if(num == 0) return "0";
        bool isNegatibe = num < 0;
        num = abs(num);
        string ans;
        while(num){
    
    
            int a = num / 7;
            int b = num % 7;
            ans = to_string(b) + ans;
            num = a;
        }
        if(isNegatibe){
    
    
            return "-"+ans;
        }
        return ans;
    }
};

168 Excel表列名称

给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

输入一个整数,输出一个字符串表示Excel 表中相对应的列名称

输入:columnNumber = 28
输出:“AB”

解析:

​ 本题是进制转换题型的变种题,和504七进制转换题十分相似,可以视为26进制转换,但是需要注意的是输入的整数是从 1 开始而不是 0,所以要将输入减1。

class Solution {
    
    
public:
    string convertToTitle(int columnNumber) {
    
    
        string ans;
        while(columnNumber){
    
    
            int a = (columnNumber-1) / 26;
            int b = (columnNumber-1) % 26;
            columnNumber = a;
            char c = b + 'A';
            ans = c + ans;
        }
        return ans;
    }
};

202 快乐数

输入一个整数,判断它是否是快乐数,快乐数是指将该数替换为它每个位置上的数字的平方和,如果该数进过上述过程最终变为 1,则称为快乐数

输入:19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

解析:

​ 本题有两个需要注意的地方,和504七进制转换题一样要能够转换出十进制每一位上的数值获取下一个数值。另一个点是,不是快乐数的数可能是 无限循环 但始终变不到 1,看到无限循环就能想到成环,而环路检测最常用的方法就是弗洛伊德判圈算法,可以使用快慢指针实现。

class Solution {
    
    
public:
    int getNext(int num){
    
    
        int nextNum = 0;
        while(num){
    
    
            int b = num % 10;
            num = num / 10;
            nextNum += b*b;
        }
        return nextNum;
    }

    bool isHappy(int n) {
    
    
        int slow = n;
        int fast = getNext(n);
        while(fast!=1 && fast!=slow){
    
    
            slow = getNext(slow);
            fast = getNext(getNext(fast));
        }
        return fast == 1;
    }
};

参考资料

LeetCode 101:和你一起轻松刷题(C++) 第 9 章 巧解数学问题

Guess you like

Origin blog.csdn.net/qq_41773806/article/details/120648933