171. Excel 表列序号 Excel Sheet Column Number
给你一个字符串 columnTitle
,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: columnTitle = "A"
输出: 1
示例 2:
输入: columnTitle = "AB"
输出: 28
示例 3:
输入: columnTitle = "ZY"
输出: 701
提示:
1 <= columnTitle.length <= 7
columnTitle 仅由大写英文组成
columnTitle 在范围 ["A", "FXSHRXW"] 内
代码:
package main import "fmt" func titleToNumber(columnTitle string) int { res := 0 for i := range columnTitle { res *= 26 res += int(columnTitle[i] - 'A' + 1) } return res } func main() { fmt.Println(titleToNumber("A")) fmt.Println(titleToNumber("AB")) fmt.Println(titleToNumber("ZY")) }
输出:
1
28
701
反向转换见leetcode168题,两个函数对比:
```golang func convertToTitle(columnNumber int) string { ans := "" for columnNumber > 0 { mod := (columnNumber - 1) % 26 ans = string('A'+mod) + ans columnNumber = (columnNumber - 1) / 26 } return ans } func titleToNumber(columnTitle string) int { ans := 0 for i := range columnTitle { n := int(columnTitle[i] - 'A' + 1) ans = ans*26 + n } return ans } ```
172. 阶乘后的零 Factorial Trailing Zeroes
给定一个整数 n
,返回 n!
结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
示例 1:
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
示例 2:
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
示例 3:
输入:n = 0
输出:0
提示:
0 <= n <= 10^4
进阶:你可以设计并实现对数时间复杂度的算法来解决此问题吗?
代码:
package main import "fmt" func trailingZeroes(n int) int { count := 0 for i := 5; i <= n; i *= 5 { count += n / i } return count } func main() { fmt.Println(trailingZeroes(3)) fmt.Println(trailingZeroes(5)) fmt.Println(trailingZeroes(0)) fmt.Println(trailingZeroes(20)) }
输出:
0
1
0
4
原理:
阶乘 n! = 1*2*3*......*(n-1)*n
这个式子中,因子 5 的个数只有5,0结尾的数才有,而因子2每个偶数都会有,包含的因子 2 的个数肯定多于因子 5 的个数,因此因子 5 的个数决定阶乘式尾数 0 的个数。