考试期间查到了很多相关知识
让数组排序之后组成的数最大
bool cmp1(int a,int b){
return a*10+b>b*10+a;
}
一个数是三的倍数 满足 每一位的数字和 是3 6 9 直接消去,重复递推,最后为0
如 12 是3 ,36 是9,72是9,75是12 ,12是3
、。。。。
题目
给你一个整数数组 digits,你可以通过按任意顺序连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数。
由于答案可能不在整数数据类型范围内,请以字符串形式返回答案。
如果无法得到答案,请返回一个空字符串。
示例 1:
输入:digits = [8,1,9]
输出:"981"
示例 2:
输入:digits = [8,6,7,1,0]
输出:"8760"
示例 3:
输入:digits = [1]
输出:""
示例 4:
输入:digits = [0,0,0,0,0,0]
输出:"0"
提示:
1 <= digits.length <= 10^4
0 <= digits[i] <= 9
返回的结果不应包含不必要的前导零。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-multiple-of-three
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
思路分析出来了,代码没写出来哈哈 我恨我字迹太菜了哈哈
如果取模3等于0,那其实可以都要,如果是1,那就得去掉一个1或者两个2,如果是2那就得去掉一个2或者两个1.
而这些删掉一个数的函数其实是类似的,可以反复调用。
注意全是0输出0而不是00000.
学习一下JOHNKRAM的压行操作
作者:YusenZhang_chatc
链接:https://leetcode-cn.com/problems/largest-multiple-of-three/solution/c-qu-diao-zui-xiao-zhi-8ms-by-yusenzhang_chatc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目我也理解错了,每个数都是 0-9 我以为是任意的整数。。
class Solution {
int cnt[10],sum;
string ans = "";
int del(int m)
{
for(int i=m;i<=9;i+=3)if(cnt[i]){cnt[i]--;return 1;}
return 0;
}
public:
string largestMultipleOfThree(vector<int>& d) {
for(auto x:d)cnt[x]++,sum+=x;
if(cnt[0]==d.size())return "0";
if(sum%3==1)if(!del(1))del(2),del(2);
if(sum%3==2)if(!del(2))del(1),del(1);
for(int i=9;i>=0;i--)while(cnt[i]--)ans+=i+'0';
return ans;
}
};
作者:YusenZhang_chatc
链接:https://leetcode-cn.com/problems/largest-multiple-of-three/solution/c-qu-diao-zui-xiao-zhi-8ms-by-yusenzhang_chatc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。