[LeetCode] Excel Sheet Column Title、Excel Sheet Column Number

/************
** Excel Sheet Column Title
**
** Given a positive integer, return its corresponding column title as appear in an Excel sheet.

For example:

1 -> A
2 -> B
3 -> C

26 -> Z
27 -> AA
28 -> AB
**
***********/
Note:
1、首先观察,其实这是个26进制的计数方式,它是从1开始计数,而不是0. (27 - 1 = 26, 类似于 10 -0 = 10)
2、存储顺序跟输出方式相反,字符数组需要反转;

void invertChar(char *pChar)  // 字符数组反转
{
    char tmp;
    int num = strlen(pChar) / sizeof(char);
    char *pLeft, *pRight;

    pLeft = pChar;
    pRight = pChar + num - 1;

    while(pLeft < pRight)
    {
        tmp = *pLeft;
        *pLeft++ = *pRight;
        *pRight-- = tmp;
    }
}

char* convertToTitle(int n)  // 计数方式
{
    int i = 0;
    static char excelSh[10];

    while (n)
    {
        excelSh[i++] = 'A' + (n - 1) % 26;
        n = (n - 1) / 26;
    }

    excelSh[i] = '\0';
    invertChar(excelSh);

    return excelSh;
}

/************
** Excel Sheet Column Number
**
** Given a column title as appear in an Excel sheet, return its corresponding column number.
For example:

1 -> A
2 -> B
3 -> C

26 -> Z
27 -> AA
28 -> AB
**
***********/
Note:
1、跟上一题反过来,这是将数字转化为对应的字符序号,理解题目按26进制数排序。

int titleToNumber(char *s)
{
    int i = 0;
    int toNumber = 0;
    int nums = strlen(s) / sizeof(char);

    for (; i < nums; i++)  // 方法1
    {
        toNumber *= 26;
        toNumber += s[i] - 'A' + 1;
    }

    return toNumber;    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值