比较版本号--split方法的运用 和 双指针的运用
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较版本号--split方法的运用 和 双指针的运用相关的知识,希望对你有一定的参考价值。
题目
方法一:split方法的运用
欺负我C++没有split方法是吧,那就只能自己写了相应的功能实现了。。
C++代码
class Solution {
public:
int compareVersion(string version1, string version2) {
vector<int>v1,v2;
//预处理,把字符串根据'.'分割,然后单独得出int结果存入空间
preHandle(version1,v1);preHandle(version2,v2);
int len1 = v1.size(),len2 = v2.size();
int lenMax = len1>len2?len1:len2;
int sum1=0,sum2 = 0;
//直接加和比较结果
for(int i=0;i<lenMax;i++){
if(i<len1)
sum1+=v1[i];
if(i<len2)
sum2+=v2[i];
if(sum1>sum2)
return 1;
if(sum1<sum2)
return -1;
}
return 0;
}
private:
//预处理函数
void preHandle(string& s,vector<int>&res){
string temp = "";
for(int i=0;i<s.size();i++){
if(isdigit(s[i])){
temp += s[i];
}else if(s[i]=='.'){
res.emplace_back(atoi(temp.c_str()));
temp = "";
}
}
res.emplace_back(atoi(temp.c_str()));
}
};
Go语言代码
关于strconv.Atoi()函数的返回值:func Atoi(s string) (int, error),很明显有两个返回值,其中的erro接口的值如果是nil则表示,转换成功,否则失败。
func compareVersion(version1, version2 string) int {
v1 := strings.Split(version1, ".")
v2 := strings.Split(version2, ".")
for i := 0; i < len(v1) || i < len(v2); i++ {
x, y := 0, 0
if i < len(v1) {
x, _ = strconv.Atoi(v1[i])
}
if i < len(v2) {
y, _ = strconv.Atoi(v2[i])
}
if x > y {
return 1
}
if x < y {
return -1
}
}
return 0
}
方法二:双指针的运用
C++代码
如果想要更原生,则可以不用string,转整数可以自己完成
class Solution {
public:
int compareVersion(string version1, string version2) {
int i=0,j=0;
while(i<version1.size()||j<version2.size())
{
string temp1 = "0",temp2="0";
while(i<version1.size()&&isdigit(version1[i]))
{
temp1+=version1[i];
i++;
}
while(j<version2.size()&&isdigit(version2[j]))
{
temp2+=version2[j];
j++;
}
if(stoi(temp1)>stoi(temp2))
return 1;
if(stoi(temp1)<stoi(temp2))
return -1;
i++;
j++;
}
return 0;
}
};
Go语言代码
func compareVersion(version1, version2 string) int {
n, m := len(version1), len(version2)
i, j := 0, 0
for i < n || j < m {
x := 0
for ; i < n && version1[i] != '.'; i++ {
x = x*10 + int(version1[i]-'0')
}
i++ // 跳过点号
y := 0
for ; j < m && version2[j] != '.'; j++ {
y = y*10 + int(version2[j]-'0')
}
j++ // 跳过点号
if x > y {
return 1
}
if x < y {
return -1
}
}
return 0
}
以上是关于比较版本号--split方法的运用 和 双指针的运用的主要内容,如果未能解决你的问题,请参考以下文章
[M模拟] lc165. 比较版本号(字符串分割+split函数+水题)
Leetcode刷题100天—165. 比较版本号( 双指针)—day25
Leetcode刷题100天—165. 比较版本号( 双指针)—day25