剑指 Offer 45. 把数组排成最小的数
这题只是一个简单的自定义排序,对于每两个数所转换而成的字符串,通过自定义函数返回小的那一个即可,但是在这里用bool cmp是会报错的,因为之前在codeblocks上面没有过报错,今天才知道对于sort的第三个参数是一个静态值,因此定义cmp函数时需要在前面加上static
class Solution {
public:
static bool cmp(string a,string b)
{
return (a+b)<(b+a);
}
string minNumber(vector<int>& nums) {
vector<string>v;
for(int i=0;i<nums.size();i++){
v.push_back(to_string(nums[i]));
}
sort(v.begin(),v.end(),cmp);
string str="";
for(int i=0;i<nums.size();i++){
str+=v[i];
}
return str;
}
};
剑指 Offer 61. 扑克牌中的顺子
这个题目唯一需要注意的地方是可能有相同的非零值出现,需要加特判
class Solution {
public:
bool isStraight(vector<int>& nums) {
int zero=0;
sort(nums.begin(),nums.end());
int i=0;
for(i=0;i<nums.size();i++){
if(nums[i]==0) zero++;
else break;
}
i++;
for(;i<nums.size();i++){
if(nums[i]==nums[i-1]) return false;
zero-=(nums[i]-nums[i-1]-1);
}
if(zero<0) return false;
else return true;
}
};