今日的 165. Compare Version Numbers Solved 使用 Python3 五分鐘就可以解掉了,主要的思考套路是設法弄出兩個等長的整數陣列來比較就可以了。
class Solution:
def compareVersion(self, version1: str, version2: str) -> int:
ver1 = [int(x) for x in version1.split(".")]
ver2 = [int(x) for x in version2.split(".")]
for x, y in zip_longest(ver1, ver2, fillvalue=0):
if x < y:
return -1
elif x > y:
return 1
return 0
如果要用 C++ 就會有點囉唆,要使用 stringstream 搭配 getline 才行,不是那麼直覺,之後再用 resize 調整成一樣的長度來比較。
class Solution {
vector<int> parse(string version) {
string num;
stringstream ss(version);
vector<int> ver;
while (getline(ss, num, '.'))
ver.emplace_back(stoi(num));
return ver;
}
public:
int compareVersion(string version1, string version2) {
auto ver1 = parse(version1);
auto ver2 = parse(version2);
int len = max(ver1.size(), ver2.size());
ver1.resize(len, 0);
ver2.resize(len, 0);
for (int i = 0; i < len; ++i) {
if (ver1[i] < ver2[i])
return -1;
else if (ver1[i] < ver2[i])
return 1;
}
return 0;
}
};
如果是 Go 要熟悉一下內建的 strings.Split 以及 strconv.Atoi
func compareVersion(version1 string, version2 string) int {
str1 := strings.Split(version1, ".")
str2 := strings.Split(version2, ".")
length := max(len(str1), len(str2))
ver1 := make([]int, length)
ver2 := make([]int, length)
for i, s := range str1 {
num, _ := strconv.Atoi(s)
ver1[i] = num
}
for i, s := range str2 {
num, _ := strconv.Atoi(s)
ver2[i] = num
}
for i := range length {
if ver1[i] < ver2[i] {
return -1
} else if ver1[i] > ver2[i] {
return 1
}
}
return 0
}
如果是 Rust 要懂得使用 split, filter_map, collect 的串接組合技,跟 trim, parse, ok 來將字串轉換成整數,以及用 resize 將陣列調整成一樣長度,再用跟 Python 一樣的 zip 結合起來一個一個比較。
impl Solution {
pub fn compare_version(version1: String, version2: String) -> i32 {
let mut ver1: Vec<i32> = version1.split('.').filter_map(|s| s.trim().parse::<i32>().ok()).collect();
let mut ver2: Vec<i32> = version2.split('.').filter_map(|s| s.trim().parse::<i32>().ok()).collect();
let len = ver1.len().max(ver2.len());
ver1.resize(len, 0);
ver2.resize(len, 0);
for (x, y) in ver1.into_iter().zip(ver2) {
if x < y {
return -1;
} else if x > y {
return 1;
}
}
0
}
}
沒有留言:
張貼留言