199 比较版本号和下一个排列

文章讲述了如何在编程中比较具有修订号的版本号,如2.5.33和0.1,以及实现一个函数来找到给定数字序列的下一个字典序更大的排列,如果不存在则返回最小排列。涉及到的关键词有版本号比较逻辑和数组操作技巧。
摘要由CSDN通过智能技术生成

问题描述:给你两个版本号version1和version2,请你比较它们,版本号由一个或多个修订号组成,个修订号由一个'.'连接。每个修订号由多位数字组成,可能包括前导0,每个版本号至少包含一个字符。修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。例如2.5.33和0.1都是有效的版本号。比较版本号时,请按照从左到右的顺序依次比较他们的修订号。比较修订号时,只需比较忽略签到零后的整数值。也就是说,修订号1和修订号001相等。如果版本号没有指定某个下标处的修订号,则该修订号视为0.例如版本1.0小于版本1.1,因为他们下标为1的修订号相同。

返回的规则如下:
version1>version2返回1,如果version1<version2返回-1

public Boolean judgeVersion(String version1,String version2)
{
String []v1=version1.split('.');
String []v2=version2.split('.');
for(int i=0;i<v1.length;i++)
{
if(Integer.parseInt(v1[i])==Integer.parseInt(v2[i]))
{
continue;
}else if(Integer.parseInt(v1[i])==Integer.parseInt(v2[i]))
{
return 1;
}else{
return -1;
}
}
return 0;
}

下一个排列:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列,即组合出下一个1更大的整数,如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列),必须原地更改,只允许使用额外的空间。

例如num=[123],输出为[1,3,2]

求解思路:从后往前进行遍历,将降序的第一个元素替换为从后往前第一个比该数字大的数字,并将从后往前降序数列变为升序。

public findNextBigger(int[]nums)
{
int index=0;
for(int i=nums.length-1;i>=0;i--)
{
if(nums[i]>nums[i+1])
{
index=i;
}else{break;}
}
if(index==0)
{
int left=0;
int right=nums.length-1;
while(right>left)
{
nums[left]^=nums[right];
nums[right]^=nums[left];
nums[right]^=nums[left];
left++;
right--
}
}else
{
int indexBigger=0;
for(int i=nums.length-1;i>=0;i--)
{
if(nums[i]>nums[index-1])
{
indexBigger=i;
break;
}
}
nums[index]^=nums[indexBigger];
nums[indexBigger]^=nums[index];
nums[index]^=nums[bigger];
int left=index;
int right=nums.length-1;
while(right>left)
{
nums[left]^=nums[right];
nums[right]^=nums[left];
nums[left]^=nums[right];
}
}
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值