算法6:模拟运算

发布于:2024-10-12 ⋅ 阅读:(10) ⋅ 点赞:(0)

题目均来自于力扣

z字形变幻

在这里插入图片描述

class Solution {
public:
    string convert(string s, int numRows) {
        int n = s.size();
        if(n <= numRows || numRows == 1) return s;
        int d = 2 * numRows - 2;
        string res;
        for(int j = 0; j < n; j += d)
        {
            res += s[j];    
        }
        for(int i = 1; i < numRows - 1; ++i)
        {   int left = d - 2 * i;
            int righ = d - left;
            bool flag = true;
            for(int j = i; j < n;)
            {
                res += s[j];
                if(flag)    j += left;
                else j+= righ;
                flag = !flag;
            }
        }
        for(int j = numRows - 1; j < n; j += d)
        {
            res += s[j];    
        }
        return res;
    }
};

外观数列

class Solution {
public:
    string countAndSay(int n) {
        string res = "1";
        for(int i = 1; i < n; ++i)
        {
            string tmp;
            int left = 0, right = 0;
            for(; right < res.size(); ++right)
            {
                if(res[right] != res[left])
                {
                    tmp += to_string(right - left) + res[left];
                    left = right;
                }
            }
            tmp += to_string(right - left) + res[left];
            res = tmp;
        }
        return res;
    }
};

数青蛙

class Solution {
public:
    int minNumberOfFrogs(string cF) {
        int hash[130];
        for (int i = 0; i < cF.size(); i++)
        {
            if(cF[i] != 'c')
            {
                if ((cF[i] == 'r' && hash['c'] > 0) ||
                    (cF[i] == 'o' && hash['r'] > 0) ||
                    (cF[i] == 'a' && hash['o'] > 0) ||
                    (cF[i] == 'k' && hash['a'] > 0))
                {   // crook
                    if(cF[i] == 'r') hash['c']--;
                    if(cF[i] == 'o') hash['r']--;
                    if(cF[i] == 'a') hash['o']--;
                    if(cF[i] == 'k') hash['a']--;
                    
                    hash[cF[i]]++;
                }
                else    return -1;
            }
            else
            {
                if(hash['k'] > 0)
                    hash['k']--;
                hash['c']++;
            }
            
        }
        for(int ch = 0; ch < 130; ch++)
        {
            if(ch != 'k' && hash[ch] != 0) return -1;
        }
        return hash['k'];
        
    }
};