《算法零基础》第20讲:进制转换(2)习题
2021/11/10 1:10:09
本文主要是介绍《算法零基础》第20讲:进制转换(2)习题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
前言
文章参考自:英雄哪里出来
目录
- 前言
- LeetCode 168. Excel表列名称
- 分析
- 代码
- 171. Excel 表列序号
- 分析
- 代码
- 课后习题
- LeetCode 483. 最小好进制
LeetCode 168. Excel表列名称
原题链接:168. Excel表列名称
分析
由题意得excel 表相当于26进制,且是按 A~Z 计数的。
那只需要十进制转26进制,利用整数每次对26取模,再加上字符A,因为取模结果为相对于A的偏移量。
代码
void Reverse(char* str) { int left = 0, right = strlen(str) - 1; while (left < right) { char tmp = str[left]; str[left] = str[right]; str[right] = tmp; left++; right--; } } char * convertToTitle(int columnNumber) { char* ans = (char*)malloc(sizeof(char) * 8); int ansSize = 0; while (columnNumber) { --columnNumber; ans[ansSize++] = columnNumber % 26 + 'A'; columnNumber /= 26; } ans[ansSize] = '\0'; Reverse(ans); return ans; }
171. Excel 表列序号
原题链接:171. Excel 表列序号
分析
对与字符串,从前往后,每一个权位都比后面的一个字符多了一个26的一次方。
那就拿字符串从后往前计算,每次循环把26的次方都带上。
示例:
若字符串为:“ABCD”;
对应的数字为 [1,2,3,4]
那计算过程就为 :
4×26 ^ 0 + 3×26 ^ 1 + 2×26 ^ 2 + 1×26 ^ 3
代码
int titleToNumber(char * columnTitle) { if (NULL == columnTitle) return 0; int ans = 0, tmp = 0; long long secondary = 1; for (int i = strlen(columnTitle) - 1; i >= 0; --i) { tmp = columnTitle[i] - 'A' + 1; ans += tmp * secondary; secondary *= 26; } return ans; }
课后习题
LeetCode 483. 最小好进制
原题链接:483. 最小好进制
这篇关于《算法零基础》第20讲:进制转换(2)习题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南