LeetCode学习-第十五天

第十五天

我使用的C++,错误的地方请见谅,文章初衷仅用来督促本人学习,如果恰巧能够给你带来帮助,我会十分开心。

一、5980. 将字符串拆分为若干长度为 k 的组

字符串 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;
        }
        
    }
};

二、5194. 得到目标值的最少行动次数

你正在玩一个整数游戏。从整数 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人是可以完赛的。

三、

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值