[解题报告](第19讲) 进制转换(一) - 入门(1)

简介: [解题报告](第19讲) 进制转换(一) - 入门

零、写在前面


        这是打卡的第十九天,今天题目比较简单,就是题量巨大,,主要知识点在


《算法零基础100讲》(第19讲) 进制转换(一) - 入门https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977

https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977


一、主要知识点


       1.十进制转7进制


       其实主要方法就是除留余数法则。


 

while(n){
        ans += n % k;    //取余数
        n /= k;        //除k
    }

二、课后习题


剑指 Offer 15. 二进制中1的个数


剑指 Offer 15. 二进制中1的个数

https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/


主要思想


按照位运算,从1到32位进行扫描就好了。


int hammingWeight(uint32_t n) {
    int count = 0;
    for(int i = 0;i < 32;i++)            //位移统计1个数
        if(n & ((uint32_t)1 << i))    count++;    //1要转换类型 不然默认位int会溢出
    return count;
}

结果分析

image.png



结果还是极好的


258. 各位相加


258. 各位相加

https://leetcode-cn.com/problems/add-digits/


主要思想


利用除留余数法得到10进制的各个和,反复执行直到小于10就好了。

int addDigits(int num){
    int ans = num;        //结果
    while(ans/10){        //和ans < 10没有本质区别
        num = ans;        //num赋值位之前的结果
        ans = 0;            //ans初始化
        while(num){        //统计num中各位和
            ans += num % 10;
            num /= 10;
        }
    }
    return ans;
}


结果分析

image.png



凑合,还行。


1290. 二进制链表转整数


1290. 二进制链表转整数

https://leetcode-cn.com/problems/convert-binary-number-in-a-linked-list-to-integer/


主要思想


每次乘2做加法就好了,有点像2分快速幂的感觉。代码不难,直接看吧。


int getDecimalValue(struct ListNode* head){
    int sum = 0;
    for( ; head; head = head -> next){    //遍历链表
        sum += head-> val;                //加入此节点
        sum *= 2;                          //作位移
    }
    return sum / 2;                //其实先做位移就不需要这个了,期待你们优化
}

结果分析


image.png


还行吧。


1837. K 进制表示下的各位数字总和


1837. K 进制表示下的各位数字总和

https://leetcode-cn.com/problems/sum-of-digits-in-base-k/


主要思想


和上面的某道题没啥区别。


int sumBase(int n, int k){
    int ans = 0;
    while(n){            //除留余数法
        ans += n % k;    
        n /= k;
    }
    return ans;
}

结果分析


image.png


可以了


1399. 统计最大组的数目


1399. 统计最大组的数目

https://leetcode-cn.com/problems/count-largest-group/


主要思想


利用hash表存储所有和的值对应元素个数,顺带统计最大值,返回就好了


int countLargestGroup(int n){
    int f[37] = {0},max=0;        //记录最大值、记录相应和的数目hash表
    for(int i = 1;i <= n; i++){    //从1到n做统计
        int count = 0,temp = i;    //统计个数初始化
            while(temp){           //除留余数法
                count += temp%10;
                temp /= 10;
            }
            f[count]++;            //相应的值+1
            if(f[count] > max) max = f[count];//更新max值
    }
    int ans = 0;                    //判断最终的答案
    for(int i = 0;i < 37;i++){
        if(f[i] == max) ans++;        //看看等于max的有几个
    }
    return ans;
}

结果分析

image.png



简洁,完美



相关文章
【LeetCode-每日一题】-67. 二进制求和
【LeetCode-每日一题】-67. 二进制求和
|
5月前
|
存储 编译器 C语言
【C语言刷题每日一题#牛客网BC107】矩阵转置
【C语言刷题每日一题#牛客网BC107】矩阵转置
|
算法 C语言 C++
【C语言蓝桥杯每日一题】——等差数列
这道题,我用到了C语言中的qsort库函数,它是一种基于快排算法思想的排序函数。首先,想让大家认识一下qsort库函数的大概样子,和如何使用。
158 0
华为机试每日一练--第七题: 进制转换
华为机试每日一练--第七题: 进制转换
华为机试每日一练--第七题: 进制转换
|
Serverless 测试技术
华为机试每日一练--第五题: 进制转换
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。 数据范围:保证结果在 1≤n≤2^31−1
华为机试每日一练--第五题: 进制转换
每日一题1055:进制转换
题目描述: 编程,输入一个10进制正整数,然后输出它所对应的八进制数。 样例输入:
108 0
|
算法 Java
进制转换(二) - 进阶
进制转换(二) - 进阶
152 0
进制转换(二) - 进阶
|
算法 Java 编译器
进制转换(一) - 入门
进制转换(一) - 入门
252 0
|
存储 机器学习/深度学习 算法
[解题报告](第19讲) 进制转换(一) - 入门(2)
[解题报告](第19讲) 进制转换(一) - 入门
[解题报告](第19讲) 进制转换(一) - 入门(2)
[解题报告](第20讲) 进制转换(二) - 进阶
[解题报告](第20讲) 进制转换(二) - 进阶
[解题报告](第20讲) 进制转换(二) - 进阶