Golang每日一练(leetDay0093) 丢失的数字、整数转换英文表示-LMLPHP

目录

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/ 

06-11 07:22