目录
165. 比较版本号 Compare Version Numbers 🌟🌟
166. 分数到小数 Fraction To Recurring Decimal 🌟🌟
🌟 每日一练刷题专栏 🌟
Golang每日一练 专栏
Python每日一练 专栏
C/C++每日一练 专栏
Java每日一练 专栏
165. 比较版本号 Compare Version Numbers
给你两个版本号 version1
和 version2
,请你比较它们。
版本号由一个或多个修订号组成,各修订号由一个 '.'
连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33
和 0.1
都是有效的版本号。
比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号 1
和修订号 001
相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为 0
。例如,版本 1.0
小于版本 1.1
,因为它们下标为 0
的修订号相同,而下标为 1
的修订号分别为 0
和 1
,0 < 1
。
返回规则如下:
- 如果
version1 > version2
返回1
, - 如果
version1 < version2
返回-1
, - 除此之外返回
0
。
示例 1:
输入:version1 = "1.01", version2 = "1.001" 输出:0 解释:忽略前导零,"01" 和 "001" 都表示相同的整数 "1"
示例 2:
输入:version1 = "1.0", version2 = "1.0.0" 输出:0 解释:version1 没有指定下标为 2 的修订号,即视为 "0"
示例 3:
输入:version1 = "0.1", version2 = "1.1" 输出:-1 解释:version1 中下标为 0 的修订号是 "0",version2 中下标为 0 的修订号是 "1" 。0 < 1,所以 version1 < version2
提示:
1 <= version1.length, version2.length <= 500
version1
和version2
仅包含数字和'.'
version1
和version2
都是 有效版本号version1
和version2
的所有修订号都可以存储在 32 位整数 中
代码1:使用 strings.Split()
分离修订号,再用 strconv.Atoi()
转换为整数进行比较
package main
import (
"fmt"
"strconv"
"strings"
)
func compareVersion(version1 string, version2 string) int {
ver1 := strings.Split(version1, ".")
ver2 := strings.Split(version2, ".")
for i := 0; i < len(ver1) || i < len(ver2); i++ {
var v1, v2 int
if i < len(ver1) {
v1, _ = strconv.Atoi(ver1[i])
}
if i < len(ver2) {
v2, _ = strconv.Atoi(ver2[i])
}
if v1 > v2 {
return 1
} else if v1 < v2 {
return -1
}
}
return 0
}
func main() {
version1 := "1.01"
version2 := "1.001"
fmt.Println(compareVersion(version1, version2))
version1 = "1.0"
version2 = "1.0.0"
fmt.Println(compareVersion(version1, version2))
version1 = "0.1"
version2 = "1.1"
fmt.Println(compareVersion(version1, version2))
}
代码2:使用正则regexp提取
package main
import (
"fmt"
"regexp"
"strconv"
)
func compareVersion(version1 string, version2 string) int {
re := regexp.MustCompile(`\d+`)
ver1 := re.FindAllString(version1, -1)
ver2 := re.FindAllString(version2, -1)
for i := 0; i < len(ver1) || i < len(ver2); i++ {
var v1, v2 int
if i < len(ver1) {
v1, _ = strconv.Atoi(ver1[i])
}
if i < len(ver2) {
v2, _ = strconv.Atoi(ver2[i])
}
if v1 > v2 {
return 1
} else if v1 < v2 {
return -1
}
}
return 0
}
func main() {
version1 := "1.01"
version2 := "1.001"
fmt.Println(compareVersion(version1, version2))
version1 = "1.0"
version2 = "1.0.0"
fmt.Println(compareVersion(version1, version2))
version1 = "0.1"
version2 = "1.1"
fmt.Println(compareVersion(version1, version2))
}
输出:
0
0
-1
166. 分数到小数 Fraction To Recurring Decimal
给定两个整数,分别表示分数的分子 numerator
和分母 denominator
,以 字符串形式返回小数 。
如果小数部分为循环小数,则将循环的部分括在括号内。
如果存在多个答案,只需返回 任意一个 。
对于所有给定的输入,保证 答案字符串的长度小于 104
。
示例 1:
输入:numerator = 1, denominator = 2 输出:"0.5"
示例 2:
输入:numerator = 2, denominator = 1 输出:"2"
示例 3:
输入:numerator = 4, denominator = 333 输出:"0.(012)"
提示:
-2^31 <= numerator, denominator <= 2^31 - 1
denominator != 0
代码:
package main
import (
"fmt"
"strconv"
)
func fractionToDecimal(numerator int, denominator int) string {
ans := ""
if numerator < 0 != (denominator < 0) { // 判断答案的正负号
ans += "-"
}
numerator = abs(numerator)
denominator = abs(denominator)
ans += strconv.Itoa(numerator / denominator) // 计算小数的整数部分
remainder := numerator % denominator
if remainder == 0 {
return ans // 如果整除,直接返回答案
}
ans += "." // 否则,计算小数的小数部分
remMap := make(map[int]int) // 用哈希表记录余数出现的位置
for remainder != 0 {
if pos, ok := remMap[remainder]; ok {
ans = ans[:pos] + "(" + ans[pos:] + ")" // 第二次出现的位置
break
}
remMap[remainder] = len(ans)
remainder *= 10
ans += strconv.Itoa(remainder / denominator)
remainder %= denominator
}
return ans
}
func abs(num int) int {
if num < 0 {
return -num
}
return num
}
func main() {
numerator := 1
denominator := 2
fmt.Println(fractionToDecimal(numerator, denominator))
numerator = 2
denominator = 1
fmt.Println(fractionToDecimal(numerator, denominator))
numerator = 4
denominator = 333
fmt.Println(fractionToDecimal(numerator, denominator))
}
输出:
0.5
2
0.(012)
🌟 每日一练刷题专栏 🌟
✨ 持续,努力奋斗做强刷题搬运工!
👍 点赞,你的认可是我坚持的动力!
🌟 收藏,你的青睐是我努力的方向!
✎ 评论,你的意见是我进步的财富!
☸ 主页:https://hannyang.blog.csdn.net/
Golang每日一练 专栏 | |
Python每日一练 专栏 | |
C/C++每日一练 专栏 | |
Java每日一练 专栏 |