在给定尺寸和元素的矢量中获取所有组合(顺序很重要)

发布于 2025-01-30 02:32:17 字数 1681 浏览 1 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你曾走过我的故事 2025-02-06 02:32:17

这绝对有可能。请参阅以下代码。它还可以与所有其他ASCII字符一起使用。您可以修改它以满足您的要求:

#include <iostream>
#include <vector>
#include <string>

inline std::vector<std::string> GetCombinations(const char min_dig, const char max_dig, int len)
{
    std::vector<std::string> combinations;
    std::string combination(len, min_dig);

    while (true)
    {
        if (combination[len - 1] == max_dig)
        {
            combination[len - 1] = min_dig;

            int increment_index = len - 2;
            while (increment_index >= 0 && combination[increment_index] == max_dig)
            {
                combination[increment_index] = min_dig;
                increment_index--;
                if (increment_index == -1) break;
            }
            if (increment_index == -1) break;
            combination[increment_index]++;
            combinations.push_back(combination); continue;
        }
        combination[len - 1]++;
        combinations.push_back(combination);
    }

    return combinations;
}

int main()
{
    std::cout << "Enter the number of digits: "; int len; std::cin >> len;
    std::cout << std::endl;
    
    // '0' is the minimum character. '2' is the maximum character. len is the length.
    std::vector<std::string> combinations = GetCombinations('0', '2', len);

    for (auto& i : combinations)
    {
        std::cout << i << std::endl;
    }
}

This is definitely possible. Refer to the below code. It also works with all the other ASCII characters. You can modify it in order to meet your demands:

#include <iostream>
#include <vector>
#include <string>

inline std::vector<std::string> GetCombinations(const char min_dig, const char max_dig, int len)
{
    std::vector<std::string> combinations;
    std::string combination(len, min_dig);

    while (true)
    {
        if (combination[len - 1] == max_dig)
        {
            combination[len - 1] = min_dig;

            int increment_index = len - 2;
            while (increment_index >= 0 && combination[increment_index] == max_dig)
            {
                combination[increment_index] = min_dig;
                increment_index--;
                if (increment_index == -1) break;
            }
            if (increment_index == -1) break;
            combination[increment_index]++;
            combinations.push_back(combination); continue;
        }
        combination[len - 1]++;
        combinations.push_back(combination);
    }

    return combinations;
}

int main()
{
    std::cout << "Enter the number of digits: "; int len; std::cin >> len;
    std::cout << std::endl;
    
    // '0' is the minimum character. '2' is the maximum character. len is the length.
    std::vector<std::string> combinations = GetCombinations('0', '2', len);

    for (auto& i : combinations)
    {
        std::cout << i << std::endl;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文