文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>几道算法题目

几道算法题目

时间:2010-10-10  来源:City of Angels

1. 求一个字符串的全排列,如果给出 abc 能够返回abc acb bac bca cab cba

#include <iostream>
#include <algorithm>
using namespace std;
void permute(char* a,int k, int m)
{
    if(k==m)
        cout<<a<<endl;
    else
    for(int i=k;i<m;i++)
    {
        swap(a[i],a[k]);
        permute(a,k+1,m);
        swap(a[i],a[k]);
    }
}

int main()
{
    char str[] = "abc";
    permute(str,0,strlen(str));
}

思想:相当于每个字符加上其他字符的全排列,如abc的全排列就是a+bc全排列,b+ac,c+ab。 

 

 

2. 将一个int转成string

代码     int r = 1235656;
    char* str = new char[10];
    int i = 0;
    while(r>0)
    {
        str[i++] = (char)(r%10)+48;
        r/=10;
    }
    for(int j = 0;j<strlen(str)/2;j++)
    {
        swap(str[j],str[strlen(str)-1-j]);
    }
    cout<< str<<endl;

其实有更快的方法,而且可以支持负数。

 

 

3.计算一个数的二进制表达中1的个数

int computeOne(int x)
{
    int count = 0;
    while(x)
    {
        x &=(x-1);
        count++;
    }
    return count;
}

思想:用x与上x-1,就会把x的最后一个1变成0

 

 

4反转链表

代码 class node{
    public:
        int data;
        node *next;
        node(int a):data(a){}
        ~node(){
            cout<<"delete"<< data << endl;
        }
};


node *Reverse(node *head)
{
    node *tmp     = NULL;                // 缓冲变量
    node *newHead = NULL;                // 反转后的新头节点

    if ( head==NULL ) return head;       // 空链表的情况
    if ( head->next==NULL ) return head; // 链表只有一个节点的情况

    while ( head )                       // 判断有没有移动到最后
    {
       tmp=head->next;                  // 临时记录下一个节点
       head->next = newHead;            // 把原来链表中的节点放到新的链表的首部
       newHead = head;
       head = tmp;
    } // end of while

    return newHead;

}

 

 

 

相关阅读 更多 +
排行榜 更多 +
枪战大乱斗2

枪战大乱斗2

飞行射击 下载
猎鸭挑战安卓版

猎鸭挑战安卓版

飞行射击 下载
空军

空军

飞行射击 下载