Ykuri98
文章46
标签14
分类1
剑指offer-day16

剑指offer-day16

把数组排成最小的数

看到题目就想到自然排序了,但是直接使用是不可以的,正确的排序方式应该是看两字符串x和y,是否满足x+y<y+x(比如3和30,如果按默认的字典序排列应该是3在前,但是两者的组合330明显大于303,所以应该是看是否满足330<303,不满足则30排在前面)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public String minNumber(int[] nums) {
StringBuffer res = new StringBuffer();
String[] s = new String[nums.length];
for(int i = 0; i < nums.length; i++){// 将int转为String
s[i] = String.valueOf(nums[i]);
}
Arrays.sort(s, (s1,s2) -> (s1+s2).compareTo(s2+s1));// 实现comparable接口的自然排序
for(String str : s){
res.append(str);
}
return res.toString();
}
}

扑克牌的顺子

一开始没有很好的想法,就放弃看答案了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public boolean isStraight(int[] nums) {
int zeroCount = 0;
Arrays.sort(nums);// 对数组排序
for(int i = 0; i < nums.length - 1; i++){
if(nums[i] == 0){
zeroCount++;// 记录大小王的个数,在0-2之间
}
else if(nums[i] == nums[i+1]){// 出现相等的数表示无法成为顺子
return false;
}
}
return nums[nums.length-1] - nums[zeroCount] < 5;// 用最大的数减去最小的非0数,如果差值小于5说明可以成为顺子
}
}
本文作者:Ykuri98
本文链接:https://ykuri98.github.io/2022/04/23/%E5%89%91%E6%8C%87offer-day16/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×