LeetCode165——比較版本號
阿新 • • 發佈:2019-01-13
我的LeetCode程式碼倉:https://github.com/617076674/LeetCode
原題連結:https://leetcode-cn.com/problems/compare-version-numbers/description/
題目描述:
知識點:字串
思路一:先分割再比較
時間複雜度是O(n),其中n為version1和version2中較長字串的長度。空間複雜度是O(m),其中m為version1和version2分割得到的數字的數量。
JAVA程式碼:
public class Solution { public int compareVersion(String version1, String version2) { ArrayList<Integer> arrayList1 = changeToArray(version1); ArrayList<Integer> arrayList2 = changeToArray(version2); for(int i = 0; i < arrayList1.size() || i < arrayList2.size(); i++){ int num1 = 0, num2 = 0; if(i < arrayList1.size() && i < arrayList2.size()){ num1 = arrayList1.get(i); num2 = arrayList2.get(i); }else if(i < arrayList1.size() && i >= arrayList2.size()){ num1 = arrayList1.get(i); }else if(i >= arrayList1.size() && i < arrayList2.size()){ num2 = arrayList2.get(i); } if(num1 > num2){ return 1; }else if(num1 < num2){ return -1; } } return 0; } private ArrayList<Integer> changeToArray(String version){ ArrayList<Integer> arrayList = new ArrayList<>(); String[] strings = version.split("\\."); for(String string : strings){ arrayList.add(Integer.parseInt(string)); } return arrayList; } }
LeetCode解題報告:
思路二:邊分割邊比較
時間複雜度是O(n),其中n為version1和version2中較長字串的長度。空間複雜度是O(1)。
JAVA程式碼:
public class Solution { public int compareVersion(String version1, String version2) { int index1 = 0, index2 = 0; while(index1 < version1.length() || index2 < version2.length()){ int num1 = 0, num2 = 0; if(index1 < version1.length() && index2 < version2.length()){ num1 = getNextNum(version1, index1); num2 = getNextNum(version2, index2); int temp1 = version1.substring(index1).indexOf("."); if(temp1 != -1) { index1 += temp1 + 1; }else{ index1 = version1.length(); } int temp2 = version2.substring(index2).indexOf("."); if(temp2 != -1) { index2 += temp2 + 1; }else{ index2 = version2.length(); } }else if(index1 < version1.length() && index2 >= version2.length()){ num1 = getNextNum(version1, index1); int temp1 = version1.substring(index1).indexOf("."); if(temp1 != -1) { index1 += temp1 + 1; }else{ index1 = version1.length(); } }else if(index1 >= version1.length() && index2 < version2.length()){ num2 = getNextNum(version2, index2); int temp2 = version2.substring(index2).indexOf("."); if(temp2 != -1) { index2 += temp2 + 1; }else{ index2 = version2.length(); } } if(num1 > num2){ return 1; }else if(num1 < num2){ return -1; } } return 0; } private int getNextNum(String version, int index){ if(version.substring(index).indexOf(".") == -1){ return Integer.parseInt(version.substring(index)); } return Integer.parseInt(version.substring(index, version.substring(index).indexOf(".") + index)); } }
LeetCode解題報告: