1.1、題目1

劍指 Offer 45. 把陣列排成最小的數

1.2、解法

這題看的題解,發現自己思路錯了。

這裡直接拿大佬的題解來講吧。

一開始這裡就把創一個string的陣列來存int陣列

String.valueOf將int轉為string存進陣列。

這裡應該排序,題解中用到了lambda表示式,判斷條件是x+y是否大於y+x

然後新增金stringbuilder然後轉成字串返回。

1.3、程式碼

class Solution {
public String minNumber(int[] nums) {
String[] strs = new String[nums.length];
for(int i = 0; i < nums.length; i++)
strs[i] = String.valueOf(nums[i]);
Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));
StringBuilder res = new StringBuilder();
for(String s : strs)
res.append(s);
return res.toString();
}
}

2.1、題目2

劍指 Offer 61. 撲克牌中的順子

2.2、解法

這是通過判斷五個值最大值減去最小值是否小於5,

通過雜湊表來判斷是否重複,如果有重複的值則不是順子。

也可以先陣列排序後,取最大值和排序後除零外的最小值來比較。

2.3、程式碼

class Solution {
public boolean isStraight(int[] nums) {
Set<Integer> s = new HashSet();
int max=0,min=14;
for(int i=0;i<nums.length;i++){
if(nums[i]==0) continue;
max = Math.max(max,nums[i]);
min = Math.min(min,nums[i]);
if(s.contains(nums[i])) return false;
s.add(nums[i]);
}
return (max-min)<5;
}
}