BM22 比较版本号
描述
牛客項目發布項目版本時會有版本號,比如1.02.11,2.14.4等等
現在給你2個版本號version1和version2,請你比較他們的大小
版本號是由修訂號組成,修訂號與修訂號之間由一個"."連接。1個修訂號可能有多位數字組成,修訂號可能包含前導0,且是合法的。例如,1.02.11,0.1,0.2都是合法的版本號
每個版本號至少包含1個修訂號。
修訂號從左到右編號,下標從0開始,最左邊的修訂號下標為0,下一個修訂號下標為1,以此類推。
比較規則:
一. 比較版本號時,請按從左到右的順序依次比較它們的修訂號。比較修訂號時,只需比較忽略任何前導零后的整數值。比如"0.1"和"0.01"的版本號是相等的
二. 如果版本號沒有指定某個下標處的修訂號,則該修訂號視為0。例如,"1.1"的版本號小于"1.1.1"。因為"1.1"的版本號相當于"1.1.0",第3位修訂號的下標為0,小于1
三.? version1?>?version2?返回1,如果?version1?<?version2?返回-1,不然返回0.
數據范圍:
1 <= version1.length, version2.length <= 10001<=version1.length,version2.length<=1000
version1?和?version2?的修訂號不會超過int的表達范圍,即不超過?32 位整數?的范圍
進階: 空間復雜度?O(1)?, 時間復雜度?O(n)
示例1
輸入:
"1.1","2.1"返回值:
-1說明:
version1 中下標為 0 的修訂號是 "1",version2 中下標為 0 的修訂號是 "2" 。1 < 2,所以 version1 < version2,返回-1示例2
輸入:
"1.1","1.01"返回值:
0說明:
version2忽略前導0,為"1.1",和version相同,返回0示例3
輸入:
"1.1","1.1.1"返回值:
-1說明:
"1.1"的版本號小于"1.1.1"。因為"1.1"的版本號相當于"1.1.0",第3位修訂號的下標為0,小于1,所以version1 < version2,返回-1示例4
輸入:
"2.0.1","2"返回值:
1說明:
version1的下標2>version2的下標2,返回1示例5
輸入:
"0.226","0.36"返回值:
1說明:
226>36,version1的下標2>version2的下標2,返回1方法一
兩個字符串按“.”分割后分別存入兩個字符串數組,先對字符串數組轉化成整數,然后遍歷比較兩個字符串數組。
時間復雜度o(max(m,n))? 空間復雜度o(max(m,n))
import java.util.*;public class Solution {/*** 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可** 比較版本號* @param version1 string字符串 * @param version2 string字符串 * @return int整型*/public int compare (String version1, String version2) {// write code here//分割版本,然后進行比較String[] st1=version1.split("\\.");String[] st2=version2.split("\\.");int len1=st1.length;int len2=st2.length;int l1=0,l2=0;while(l1<len1&&l2<len2){int n1=Integer.valueOf(st1[l1]);int n2=Integer.valueOf(st2[l2]);if(n1>n2){return 1;}else if(n1<n2){return -1;}l1++;l2++;}while(l1<len1){//剩余的哪個版本,觀察是否有大于0的值,如果有則該版本大int n1=Integer.valueOf(st1[l1]);if(n1>0){return 1;}l1++;}while(l2<len2){ //剩余的哪個版本,觀察是否有大于0的值,如果有則該版本大int n2=Integer.valueOf(st2[l2]);if(n2>0){return-1;}l2++;}return 0;} }方法二
直接在兩個字符串進行比較,不申請空間內存,兩個字符串都以每個“.”為段的字符串進行轉化成整數,化為整數后然后進行比較大小
時間復雜度o(max(m,n))? 空間復雜度o(1)
/*** 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可** 比較版本號* @param version1 string字符串 * @param version2 string字符串 * @return int整型** C語言聲明定義全局變量請加上static,防止重復定義*/ int compare(char* version1, char* version2 ) {// write code herechar* p=version1;char* q=version2;//兩個指針while(*p!=0||*q!=0){ //當其中一個不為空時,另一個為空的片段的值始終為0int n1=0,n2=0;while(*p!=0&&*p!='.'){ //p以每個“.”為斷開的字符串片段進行整數計算n1=n1*10+(*p-'0');p++;}while(*q!=0&&*q!='.'){ //q以每個“.”為斷開的字符串片段進行整數計算n2=n2*10+(*q-'0');q++;}if(n1>n2){return 1;}else if(n1<n2){return -1;}if(*p!=0){ //p指針沒有指向空時p++; }if(*q!=0){//q指針沒有指向空時q++; }}return 0;}總結
以上是生活随笔為你收集整理的BM22 比较版本号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BM16 删除有序链表中重复的元素-II
- 下一篇: BM26 求二叉树的层序遍历(变形更新中