leecode#Excel表列序号#组合两个表

题目描述:

给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。

分析:

法1,进制转换

这道题要求将Excel 表中的列名称转换成相对应的列序号。由于Excel 表的列名称由大写字母组成,大写字母共有 26 个,因此列名称的表示实质是 26 进制,需要将 26 进制转换成十进制。

当列名称的长度为 n 时,列名称的每个字母都有 26 种不同的取值,因此长度为 n 的不同列名称有 26^n 个。

当 n=1 时,列名称的取值范围是 A 到 Z,分别对应 1 到 26。当 n>1 时,首先得到除了最高位以外的 n−1 位部分对应的列序号,然后考虑最高位对列序号的增量。

leecode#Excel表列序号#组合两个表_第1张图片

上述结论对 n>1 的情况都成立。当 n=1 时,n−1=0,k * 26^(n-1)=k * 1=k,因此 n=1 的情况也适用上述结论。

ord() 返回值ascii是对应的十进制整数。

代码:

class Solution:
    def titleToNumber(self, columnTitle: str) -> int:
        number, multiple = 0, 1
        for i in range(len(columnTitle) - 1, -1, -1):
            k = ord(columnTitle[i]) - ord("A") + 1   #与26进制不同,从1开始
            number += k * multiple
            multiple *= 26                        #刚好构成k * 26^n-1
        return number

题目描述:

编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为空  null 。

以 任意顺序 返回结果表。

查询结果格式如下所示。

leecode#Excel表列序号#组合两个表_第2张图片

分析:

使用outer join

因为表 Address 中的 personId 是表 Person 的外关键字,所以我们可以连接这两个表来获取一个人的地址信息。

考虑到可能不是每个人都有地址信息,我们应该使用outer join,而不是默认的inner join

代码:

select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId
;

你可能感兴趣的:(excel)