当前位置:   article > 正文

LeetCode学习-第十五天_leetcode 在一次行动中,你可以做下述两种操作之一: 递增,将当前整数的值加 1(即,

leetcode 在一次行动中,你可以做下述两种操作之一: 递增,将当前整数的值加 1(即,

第十五天

我使用的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;
        }
        
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

二、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));
        }
        
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

这次的周赛我做出来了两道题目,很严重的一个问题是代码不够简洁和严谨,在解题的时候逻辑不够流畅,还是做的题少,第一阶段我想先以周赛能够做出前三道问题为目标。基本上每次比赛前500人是可以完赛的。

三、

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/848142
推荐阅读
相关标签
  

闽ICP备14008679号