编程语言
首页 > 编程语言> > 《算法零基础》第20讲:进制转换(2)习题

《算法零基础》第20讲:进制转换(2)习题

作者:互联网

前言

文章参考自:英雄哪里出来

目录

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. 最小好进制

在这里插入图片描述

标签:26,20,进制,Excel,表列,char,str,ans,习题
来源: https://blog.csdn.net/m0_56257585/article/details/121238633