LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 711|回复: 1

一个算法,看看谁能简化以下

[复制链接]
发表于 2003-11-4 16:16:05 | 显示全部楼层 |阅读模式
[php]
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <cmath>
#include <string>
#include <list>

using namespace std;

class CKeyBind
{
public:
        int number;
        string keys[3];       
};

CKeyBind keybinds[10];

void FillChars(int i, CKeyBind& keybind)
{
        char chStart = (char)int('A') + i * 3;
        keybind.keys[0] = chStart;
        keybind.keys[1] = chStart + 1;
        keybind.keys[2] = chStart + 2;
}

void InitializeKeybinds()
{
        for (int i = 0; i < 10; ++i)
        {
                keybinds.number = i;
                FillChars(i, keybinds);
        }
}

typedef list<string> stringlist;
stringlist CombineString(stringlist& s, char* sSrc)
{
        stringlist li;

        if (sSrc == NULL)
        {
                return s;
        }

        if (strlen(sSrc) == 1 && s.size() == 0)
        {
                int n = *sSrc - '0';
                li.insert(li.end(), keybinds[n].keys, keybinds[n].keys + 3);
                return li;
        }
        else
        {
                s = CombineString(s, sSrc + 1);
                stringlist::iterator it;
                for (it = s.begin(); it != s.end(); ++it)
                {
                        int n = *sSrc - '0';
                        for (int i = 0; i < 3; ++i)
                        {
                                string s = *it;
                                s += keybinds[n].keys;
                                li.insert(li.end(), s);
                        }
                }

                return li;
        }

        return li;
}

char* s = "234";

int _tmain(int argc, _TCHAR* argv[])
{
        InitializeKeybinds();
       
        list<string> li;
        list<string> listresult = CombineString(li, "2345");
        list<string>::iterator it;
        for (it = listresult.begin(); it != listresult.end(); ++it)
        {
                cout << *it << endl;
        }

        cout << listresult.size() << endl;
        getchar();
        return 0;
}
[/php]
发表于 2003-11-4 23:29:59 | 显示全部楼层
chStart + 1; 改成++在性能上可以提高

另外简单的东西没有必要使用函数
直接写在里面好了

函数实现的是比较单一的功能 如果不多的话 并且不会被多个地方调用的话写在一起不要分成一个函数

再就是不知道你要实现什么功能

如果可以的话
先自己在纸上画出你想做的事 看看有没有最简单的

先有讨论后有代码  这是成熟的程序开发者的习惯
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表