微软100题(89)atoi实现

来源:互联网 发布:淘宝恢复淘宝客权重 编辑:程序博客网 时间:2024/06/06 14:01
1.2005年11月15日华为软件研发笔试题。实现一单链表的逆转。
2.编码实现字符串转整型的函数(实现函数atoi的功能),据说是神州数码笔试题。如将字符
串 ”+123”123, ”-0123”-123, “123CS45”123, “123.45CS”123, “CS123.45”0
3.快速排序(东软喜欢考类似的算法填空题,又如堆排序的算法等)
4.删除字符串中的数字并压缩字符串。
如字符串”abc123de4fg56”处理后变为”abcdefg”。注意空间和效率。
(下面的算法只需要一次遍历,不需要开辟新空间,时间复杂度为O(N))
5.求两个串中的第一个最长子串(神州数码以前试题)。
如"abractyeyt","dgdsaeactyey"的最大子串为"actyet"。

解答:
1.ReverseList(ListNode* phead)

2.atoi考虑的要周全
#define INT_MAX ((int)0x7FFFFFFF)#define INT_MIN ((int)0x80000000)//#define INT_MAX (~(unsigned int)0/2) bool valid=true;int myatoi(constchar * str){bool minus=false;long long result=0;valid=false;if(str==NULL)return0;while(*str=='')str++;if(*str=='-'){inus=true;str++;}else if(*str=='+')str++;if(*str<'0'||*str>'9')return0;valid=true;while(*str>='0' && *str<='9'){result=result*10+*str-'0';if((minus && result>INT_MAX + 1LL) || (!minus && result>INT_MAX)){valid=false;return0;}str++;}if(minus)result*=-1;return (int)result;}


3.主要是Partition的写法

4.
void FuncStr(char* str){char* p1 = str;char* p2 = str;while (*p1 != '\0'){if(*p1<'0'||*p1>'9')*p2++ = *p1;p1++;}*p2 = '\0';}


5.动态规划

0 0