My code:
public class Solution {
public int compareVersion(String version1, String version2) {
int vBegin1 = 0;
int vBegin2 = 0;
while (vBegin1 < version1.length() && vBegin2 < version2.length()) {
int i = vBegin1;
for(; i < version1.length(); i++) {
char temp = version1.charAt(i);
if (temp == '.')
break;
}
int big1 = Integer.parseInt(version1.substring(vBegin1, i));
if (i == version1.length())
vBegin1 = i;
else
vBegin1 = i + 1;
int j = vBegin2;
for(; j < version2.length(); j++) {
char temp = version2.charAt(j);
if (temp == '.')
break;
}
int big2 = Integer.parseInt(version2.substring(vBegin2, j));
if (j == version2.length())
vBegin2 = j;
else
vBegin2 = j + 1;
if (big1 > big2)
return 1;
else if (big1 < big2)
return -1;
else
continue;
}
if (vBegin1 >= version1.length() && vBegin2 < version2.length()) {
int j = vBegin2;
for(; j < version2.length(); j++) {
char temp = version2.charAt(j);
if (temp == '.')
break;
}
int big2 = Integer.parseInt(version2.substring(vBegin2, j));
if (big2 > 0)
return -1;
else
return 0;
}
else if (vBegin1 < version1.length() && vBegin2 >= version2.length()) {
int i = vBegin1;
for(; i < version1.length(); i++) {
char temp = version1.charAt(i);
if (temp == '.')
break;
}
int big1 = Integer.parseInt(version1.substring(vBegin1, i));
if (big1 > 0)
return 1;
else
return 0;
}
else
return 0;
}
public static void main(String[] args) {
Solution test = new Solution();
System.out.println(test.compareVersion("1.0", "1.1"));
}
}
My test result:
死B 变态题。没什么算法思想,就是不断地找"." 然后把之前的提取出来,比较。
然后在处理一些细节。
**
总结:String
Array 的 easy medium 免费的题目终于都刷完了,这周开始String 模式。
总结一些算法,和小伙伴开个讨论会。
**
Anyway, Good luck, Richardo!
My code:
public class Solution {
public int compareVersion(String version1, String version2) {
String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\.");
if (v1.length == 0 && v2.length == 0) {
return compare(version1, version2);
}
int i = 0;
for (; i < Math.min(v1.length, v2.length); i++) {
if (compare(v1[i], v2[i]) > 0) {
return 1;
}
else if (compare(v1[i], v2[i]) < 0) {
return -1;
}
}
if (v1.length > v2.length) {
for (; i < v1.length; i++) {
if (compare(v1[i], "0") > 0) {
return 1;
}
}
return 0;
}
else if (v1.length < v2.length) {
for (; i < v2.length; i++) {
if (compare(v2[i], "0") > 0) {
return -1;
}
}
return 0;
}
else {
return 0;
}
}
private int compare(String s1, String s2) {
int i1 = Integer.valueOf(s1);
int i2 = Integer.valueOf(s2);
if (i1 > i2) {
return 1;
}
else if (i1 < i2) {
return -1;
}
else {
return 0;
}
}
public static void main(String[] args) {
Solution test = new Solution();
int ret = test.compareVersion("1.0", "1.1");
System.out.println(ret);
}
}
自己做了出来。
主要考虑几点:
1 . 输入部分没有小数点,那么直接比较
2 . 比较函数得自己重写,有的时候会有 01 , 1比较
3 . 当一个数组提前结束的时候,更长的数组不一定更大,因为可能接下去的字符串都是 0,那么就得返回 0,所以得考虑这个情况。
4 . Java, String.split("."); 不能split "." , 得用 ("\."),不知道为什么
Anyway, Good luck, Richardo! -- 09/20/2016