每次写贪心的算法,都是一阵恶心。这个启发式的贪心规则该怎么设计,头疼。。。
这个贪心规则是这样的,首先要选数量多的先放。除非后面两个都是这个,才会考虑放其他的。每次就放一个,而不是一下放多个。
class Solution {
public:
// 还是很讨厌贪心算法,真是无从下手啊
// 数量多的一定是能放先放。除非量已经饱和,才会别的大的放其他。
string longestDiverseString(int a, int b, int c) {
string res = "";
int A = 0;
int B = 0;
int C = 0;
while(1){
if ((a>=b&&a>=c&&A<2&&a>0)||(B==2&&a>0)||(C==2&&a>0)){
res += 'a';
a--;
A++;
B=0;
C=0;
}
else if ((b>=a&&b>=c&&B<2&&b>0)||(A==2&&b>0)||(C==2&&b>0)){
res += 'b';
b--;
B++;
A=0;
C=0;
}
else if ((c>=a&&c>=b&&C<2&&c>0)||(A==2&&c>0)||(B==2&&c>0)){
res += 'c';
c--;
C++;
A=0;
B=0;
}
else{
return res;
}
cout<<a<<" "<<b<<" "<<c<<" "<<res<<endl;
}
return res;
}
};