我正在学习编程,我遇到了看和说序列.我尝试用c ++编写代码

I am learning programming, I came across Look and Say sequence.I tried to code it in c++

本文关键字:代码 学习 编程 遇到      更新时间:2023-10-16

您能否建议我如何降低此代码的复杂性。这是我用 c++ 编写的代码。这个问题可能有算法,但我想提高我的编码技能。谢谢。

这是我尝试生成的序列。例如:1, 11, 21, 1211, 111221, ...

1

读为"一个 1"或 11。

11 读作"两个 1"或 21。

21 读为"一个 2,然后是一个 1"或 1211在这里,函数 countAndSay 获取要生成的整数或第 n 个数字,并返回一个字符串,显示生成的第 n 个序列。

#include "string"
#include "iostream"
#include "unordered_map"
using namespace std;
string countAndSay(int n) {
if (n == 1)
    return "1";
int j;
string s = "1";
string temp = "";
unordered_map<char, int> dict;
for (int i = 1; i<n; i++) {
    for (j = 0; j<s.length(); ++j) {
        if (dict.find(s[j]) == dict.end() && j == 0)
            dict[s[j]] = 1;
        else if (dict.find(s[j]) == dict.end()) {
            temp += to_string(dict[s[j - 1]]);
            temp += s[j - 1];
            dict.clear();
            dict[s[j]] = 1;
        }
        else
            dict[s[j]] += 1;
    }
    temp += to_string(dict[s[j - 1]]);
    temp += s[j - 1];
    dict.clear();
    s = temp;
    temp = "";
}
return s;
}
int main()
{
String s=countAndSay(3);
cout<<s;
return 0;
}

读取数字并将其存储在数组或字符串中。 循环遍历并检查当前元素是否与上一个元素相同(基于 0 索引,从 1 开始并检查 arr[i] == arr[i-1]),然后增加计数器或打印带计数器的 [i-1] 元素并将计数器重置为 1。