a和b中,大的为p,小的为q
令k = p / (q + 1),当i % k == 0时,str += 小的,否则str += 大的,
当然要注意大的因为str加的次数多,所以会在某一次迭代中 <= 小的,但绝不会 < 小的 - 2,可以思考一下为什么
这时每次加一个小的加一个大的即可
class Solution { public: string strWithout3a3b(int a, int b) { int p, q; char r, t; if(a > b) { p = a; r = 'a'; q = b; t = 'b'; } else { p = b; r = 'b'; q = a; t = 'a'; } string str = ""; int k = ceil(p / (double)(q + 1)); for(int i = 0; i < a + b; i++) { if(i > 0 && (i + 1) % (k + 1) == 0 && q != 0) str += t, q--; else if(p != 0) str += r, p--; if(p <= q) { while(p && q) { str += t; q--; str += r; p--; } } while(q == 0 && p) { str += r; p--; } while(p == 0 && q) { str += t; q--; } } return str; } };