165. Compare Version Numbers
阿新 • • 發佈:2018-12-22
首先想到的解法是根據'.'分割出字串,然後求解。
由於忘了怎麼使用'.'去分割,所以自己寫了一個函式去轉換。
剛開始兩次提交分別出錯。
一個是沒有考慮1,0這種不帶'.'的,就是轉換函式寫錯了。:在轉換函式結尾處新增:list.add(Integer.parseInt(tempstr.toString()));
一個是沒有考慮:1.0.0.0和1.0這種是相等的;一種做法是在轉換函式裡出去末尾的0;另外一種是在比較時,字串短的自動補0q去比較。
程式碼1:在轉換函式裡出去末尾無效的0
class Solution { public int compareVersion(String version1, String version2) { List<Integer> str1=F(version1); List<Integer> str2=F(version2); int i=0,j=0; while(i<str1.size() && j<str2.size()){ if(str1.get(i)==str2.get(j)){ i++; j++; }else if(str1.get(i)>str2.get(j)) return 1; else return -1; } if(str1.size()==str2.size()) return 0; else if(str1.size()>str2.size()) return 1; else return -1; } public static List<Integer> F(String str){ char ch[]=str.toCharArray(); List<Integer> list=new ArrayList<Integer>(); StringBuffer tempstr=new StringBuffer(); for(int i=0;i<ch.length;i++){ if(ch[i]=='.'){ list.add(Integer.parseInt(tempstr.toString())); tempstr.delete(0,tempstr.length()); } else tempstr.append(ch[i]); } list.add(Integer.parseInt(tempstr.toString())); int len=list.size()-1; for(int i=len;i>0;i--){ if(list.get(i)==0) list.remove(i); else break; } return list; } }
程式碼2:在長度較短的字串後自動補0
class Solution { public int compareVersion(String version1, String version2) { List<Integer> str1=F(version1); List<Integer> str2=F(version2); int i=0,j=0; while(i<str1.size() || j<str2.size()){ int tempi=i<str1.size()?str1.get(i):0; int tempj=j<str2.size()?str2.get(j):0; if(tempi==tempj){ i++; j++; }else if(tempi>tempj) return 1; else return -1; } return 0; } public static List<Integer> F(String str){ char ch[]=str.toCharArray(); List<Integer> list=new ArrayList<Integer>(); StringBuffer tempstr=new StringBuffer(); for(int i=0;i<ch.length;i++){ if(ch[i]=='.'){ list.add(Integer.parseInt(tempstr.toString())); tempstr.delete(0,tempstr.length()); } else tempstr.append(ch[i]); } list.add(Integer.parseInt(tempstr.toString())); return list; } }
程式碼3:利用split函式轉換,然後短字串自動補0.
class Solution { public int compareVersion(String version1, String version2) { String str1[]=version1.split("\\."); String str2[]=version2.split("\\."); int i=0,j=0; while(i<str1.length || j<str2.length){ int tempi=i<str1.length?Integer.parseInt(str1[i]):0; int tempj=j<str2.length?Integer.parseInt(str2[j]):0; if(tempi==tempj){ i++; j++; }else if(tempi>tempj) return 1; else return -1; } return 0; } }