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;
}
}