目录
268. 丢失的数字 Missing Number 🌟
273. 整数转换英文表示 Integer To English Words 🌟🌟🌟
🌟 每日一练刷题专栏 🌟
Rust每日一练 专栏
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
268. 丢失的数字 Missing Number
给定一个包含 [0, n]
中 n
个数的数组 nums
,找出 [0, n]
这个范围内没有出现在数组中的那个数。
示例 1:
输入:nums = [3,0,1] 输出:2 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。
示例 2:
输入:nums = [0,1] 输出:2 解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。
示例 3:
输入:nums = [9,6,4,2,3,5,7,0,1] 输出:8 解释:n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。
示例 4:
输入:nums = [0] 输出:1 解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。
提示:
n == nums.length
1 <= n <= 10^4
0 <= nums[i] <= n
nums
中的所有数字都 独一无二
进阶:你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?
代码1:求和
package main
import "fmt"
func missingNumber(nums []int) int {
n := len(nums)
sum := n * (n + 1) / 2 // 求出 0 到 n 的总和
for _, num := range nums {
sum -= num // 减去 nums 中所有数的总和
}
return sum // 剩余的就是缺失的数字
}
func main() {
nums := []int{3, 0, 1}
fmt.Println(missingNumber(nums))
nums = []int{0, 1}
fmt.Println(missingNumber(nums))
nums = []int{9, 6, 4, 2, 3, 5, 7, 0, 1}
fmt.Println(missingNumber(nums))
nums = []int{0}
fmt.Println(missingNumber(nums))
}
代码2:哈希表
package main
import "fmt"
func missingNumber(nums []int) int {
numMap := make(map[int]bool) // 定义一个 map,用于记录数组中的数字
for _, num := range nums {
numMap[num] = true // 将 nums 数组中的数添加到 map 的键中
}
for i := 0; i <= len(nums); i++ {
if !numMap[i] { // 如果 i 不在 map 的键中,则说明该数字缺失
return i
}
}
return -1 // 不可能到达这里,只是为了编译不报错
}
func main() {
nums := []int{3, 0, 1}
fmt.Println(missingNumber(nums))
nums = []int{0, 1}
fmt.Println(missingNumber(nums))
nums = []int{9, 6, 4, 2, 3, 5, 7, 0, 1}
fmt.Println(missingNumber(nums))
nums = []int{0}
fmt.Println(missingNumber(nums))
}
代码3:位运算
package main
import "fmt"
func missingNumber(nums []int) int {
missing := len(nums) // 初始化为缺失的数字,因为 nums 是缺失一个数字的序列,所以就是 len(nums)
for i, num := range nums {
missing ^= i ^ num // 使用异或运算寻找缺失的数字
}
return missing
}
func main() {
nums := []int{3, 0, 1}
fmt.Println(missingNumber(nums))
nums = []int{0, 1}
fmt.Println(missingNumber(nums))
nums = []int{9, 6, 4, 2, 3, 5, 7, 0, 1}
fmt.Println(missingNumber(nums))
nums = []int{0}
fmt.Println(missingNumber(nums))
}
输出:
2
2
8
1
273. 整数转换英文表示 Integer To English Words
将非负整数 num
转换为其对应的英文表示。
示例 1:
输入:num = 123 输出:"One Hundred Twenty Three"
示例 2:
输入:num = 12345 输出:"Twelve Thousand Three Hundred Forty Five"
示例 3:
输入:num = 1234567 输出:"One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
提示:
0 <= num <= 2^31 - 1
代码:
package main
import (
"fmt"
"strings"
)
var belowTwenty = []string{
"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen",
}
var tens = []string{
"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety",
}
var thousands = []string{
"", "Thousand", "Million", "Billion",
}
func numberToWords(num int) string {
if num == 0 {
return "Zero"
}
res := ""
i := 0
for num > 0 {
if num%1000 != 0 {
res = helper(num%1000) + thousands[i] + " " + res
}
num /= 1000
i++
}
return strings.TrimSpace(res)
}
func helper(num int) string {
if num == 0 {
return ""
} else if num < 20 {
return belowTwenty[num] + " "
} else if num < 100 {
return tens[num/10] + " " + helper(num%10)
} else { // num >= 100
return belowTwenty[num/100] + " Hundred " + helper(num%100)
}
}
func main() {
fmt.Println(numberToWords(123))
fmt.Println(numberToWords(12345))
fmt.Println(numberToWords(1234567))
}
输出:
One Hundred Twenty Three
Twelve Thousand Three Hundred Forty Five
One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Rust每日一练 专栏(2023.5.16~)更新中... | |
Golang每日一练 专栏(2023.3.11~)更新中... | |
Python每日一练 专栏(2023.2.18~2023.5.18)暂停更 | |
C/C++每日一练 专栏(2023.2.18~2023.5.18)暂停更 | |
Java每日一练 专栏(2023.3.11~2023.5.18)暂停更 |