赞
踩
我使用的C++,错误的地方请见谅,文章初衷仅用来督促本人学习,如果恰巧能够给你带来帮助,我会十分开心。
字符串 s 可以按下述步骤划分为若干长度为 k 的组:
第一组由字符串中的前 k 个字符组成,第二组由接下来的 k 个字符串组成,依此类推。每个字符都能够成为 某一个 组的一部分。
对于最后一组,如果字符串剩下的字符 不足 k 个,需使用字符 fill 来补全这一组字符。
注意,在去除最后一个组的填充字符 fill(如果存在的话)并按顺序连接所有的组后,所得到的字符串应该是 s 。
给你一个字符串 s ,以及每组的长度 k 和一个用于填充的字符 fill ,按上述步骤处理之后,返回一个字符串数组,该数组表示 s 分组后 每个组的组成情况 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/divide-a-string-into-groups-of-size-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution { public: vector<string> divideString(string s, int k, char fill) { //先得出字符串字符的个数,然后对3求余数,得出需要补几个,然后分组 int n = s.size(); int m = n / k, l = n % k;//n + 1个数组,每个数组3个字符 if (l == 0){ m = m - 1; } vector<string> ans(m + 1); int j = 0, i = 0; for (int i = 0; i < n - l; i++){ ans[j].push_back(s[i]); if (ans[j].size() == k){ j++; } } if (l == 0){ return ans; } else { for (int h = n - l; h < n; h++){ ans[j].push_back(s[h]); } for (int o = 0; o < k - l; o++){ ans[j].push_back(fill); } return ans; } } };
你正在玩一个整数游戏。从整数 1 开始,期望得到整数 target 。
在一次行动中,你可以做下述两种操作之一:
递增,将当前整数的值加 1(即, x = x + 1)。
加倍,使当前整数的值翻倍(即,x = 2 * x)。
在整个游戏过程中,你可以使用 递增 操作 任意 次数。但是只能使用 加倍 操作 至多 maxDoubles 次。
给你两个整数 target 和 maxDoubles ,返回从 1 开始得到 target 需要的最少行动次数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-moves-to-reach-target-score
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution { public: int minMoves(int target, int maxDoubles) { //奇数就减一,偶数就乘2,每乘一次二就对double加一,如果某次乘二后double变为max,后续操作只能减一 int dou = maxDoubles, n = target, count = 0; while (n != 1 && dou != 0){ if (n % 2 == 0){//偶数 n = n / 2; dou--; count++; } else {//奇数 n -= 1; count++; } } if (maxDoubles == 0){ return n - 1; } else if (n == 1){//结束 return count; } else {//翻倍次数用完 return (count + (n - 1)); } } };
这次的周赛我做出来了两道题目,很严重的一个问题是代码不够简洁和严谨,在解题的时候逻辑不够流畅,还是做的题少,第一阶段我想先以周赛能够做出前三道问题为目标。基本上每次比赛前500人是可以完赛的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。