Compare Version Numbers 版本号比较 C语言实现
来源:互联网 发布:linux ide 编辑:程序博客网 时间:2024/04/29 09:10
Compare two version numbers version1 and version2.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.
You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not “two and a half” or “half way to version three”, it is the fifth second-level revision of the second first-level revision.
Here is an example of version numbers ordering:
0.1 < 1.1 < 1.2 < 13.37
题目的意思就是求两个版本号的大小比较,但给出的版本号是字符串类型的,要转换为数字进行比较
解题思路:1. 把版本号的数字转化为数组存储。 2. 利用数组进行对应大小比较。
难点:获取两个’.’之间的数字,并注意考虑开始和结束情况
在leetcode里的难度类型为easy,但我一开始还是没做出来,在参考了别人的做题思路后才做出来的,很感谢那些大神对这个题目的思路分享。
下面是我用C语言实现的代码,比较累赘:
/** * 题目的意思是比较两个版本的大小,版本大小全是以字符串的形式存储 * 解题思路:取出版本号的数字,并存储在数组中,并对两个数组进行比较 * 重点在取出版本号的数字,注意第一个数字和最后一个数字 * 字符串转数字的C函数为int num = atoi(char *); * 设置一个动态数组来存储数字 * * * */void getInt(char *version,int size,int *ar);int compareVersion(char *version1, char *version2){ int i,count; int *arr = NULL; int *arr1 = NULL; int size,size1; int max = 0; size = 0; while(*(version1 + size) != '\0'){//求数组的长度 size++; } size1 = 0; while(*(version2 + size1) != '\0'){ size1++; } if(size > size1) max = size; else max = size1; arr = (int *)malloc(max*sizeof(int));//分配一个动态数组 arr1 = (int *)malloc(max*sizeof(int)); memset(arr, 0 ,max*sizeof(int));//为动态分配的数组进行清空,不然里面全是垃圾数据,影响后面的赋值 memset(arr1, 0 ,max*sizeof(int)); getInt(version1, size, arr); getInt(version2, size1, arr1); for(i = 0; i < max; i++){//这个循环是用于比较版本号 if(*(arr + i) == *(arr1 + i)){ continue; }else if(*(arr + i) > *(arr1 + i)){ return 1; }else if(*(arr + i) < *(arr1 + i)){ return -1; } } free(arr);//释放动态申请的数组大小,以免内存泄露 free(arr1); return 0;}void getInt(char *version, int size, int * ar){ int i,j; char str[255]; char *p = NULL; int temp,temp0; temp = 0; temp0 = j = 0; p = strchr(version, '.');//strchr函数用于判断字符串中是否有'.'字符,有则返回指向该字符第一次出现的指针,否则返回NULL if(p != NULL){//这里面试读取第一个数字 memset(str, 0, 255); strncpy(str, version, p - version); temp0 = temp = p - version; *(ar+j) = atoi(str); j++; for(i = p - version + 1; i < size; i++){//这里面是循环读取数字字符,并把它转化为整型 if(*(version + i) == '.'){ temp0 = temp; temp = i; memset(str, 0, 255);//这一步也是需要的,不然里面全是垃圾数据,影响后面的求值 strncpy(str, version + temp0 + 1, i - temp0 - 1); *(ar+j) = atoi(str); j++; } } if(i == size){//这里面是读取最后一个数字字符,并转化为数字 memset(str, 0, 255); strncpy(str, version + temp + 1, size - temp0 - 1); *(ar+j) = atoi(str); } }else{//这里面是当版本version没有'.'号时,直接把version字符串转化为整型int存储 *(ar+j) = atoi(version); }}
- Compare Version Numbers 版本号比较 C语言实现
- leetcode Compare Version Numbers版本号比较
- (Leetcode) Compare Version Numbers --- 比较版本号
- 165. Compare Version Numbers (版本号比较)
- 版本号比较(Compare two Version numbers)
- leetcode 165. Compare Version Numbers 版本号比较
- 【LeetCode-面试算法经典-Java实现】【165-Compare Version Numbers(比较版本号)】
- 【C语言】LeetCode 165. Compare Version Numbers
- Compare Version Numbers 比较版本号,输入是以小数点为分隔符的字符串数字
- LeetCode 165 Compare Version Numbers(比较版本号)(string)(*)
- LeetCode165 Compare Version Number 比较版本号
- LeetCode 之 Compare Version Numbers — C 实现
- leetcode 165. Compare Version Numbers-版本比较
- Compare Version Numbers 比较软件版本
- LeetCode Compare Version Numbers(版本比较)
- leetcode_165. Compare Version Numbers 比较版本大小
- [C++]LeetCode: 59 Compare Version Numbers
- Leetcode Compare Version Numbers
- JDBC写的太详细了,帮助很大
- java --- 入门时的一些基本概念的理解(j2ee,j2se,j2me,jdk,jre,jvm,跨平台)
- Selector的使用(选择器)
- 详解Cocos2d-X中宏CC_DLL(转)
- 【蓝桥杯真题】题目标题: 第39级台阶
- Compare Version Numbers 版本号比较 C语言实现
- 文件I/O_lseek函数
- 单例
- JavaScript 有多灵活?
- 网络编程练习-setsockopt&getsockopt
- iOS网络编程层次模型
- 数学能力测试
- maven 项目构建
- .vimrc的设置