当前位置:  开发笔记 > 编程语言 > 正文

算法:里程表/蛮力

如何解决《算法:里程表/蛮力》经验,为你挑选了1个好方法。



1> Jon Skeet..:

这不是相当的副本"递归,而不是多回路"但它相当接近.如果这对您没有帮助,我会写一个解决方案.

编辑:这是一个非递归的解决方案.递归的一个稍微难以返回一个IEnumerable,但返回一个迭代器给了一个很好的接口IMO :)

private static IEnumerable GetAllMatches(char[] chars, int length)
{
    int[] indexes = new int[length];
    char[] current = new char[length];
    for (int i=0; i < length; i++)
    {
        current[i] = chars[0];
    }
    do
        {
            yield return new string(current);
        }
        while (Increment(indexes, current, chars));
}

private static bool Increment(int[] indexes, char[] current, char[] chars)
{
    int position = indexes.Length-1;

    while (position >= 0)
    {
        indexes[position]++;
        if (indexes[position] < chars.Length)
        {
             current[position] = chars[indexes[position]];
             return true;
        }
        indexes[position] = 0;
        current[position] = chars[0];
        position--;
    }
    return false;
}

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有