在记事本中写算法题和在纸上写其实感觉差不多,反正是不能进行调试。想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写的代码对应的反汇编代码,也就是要深入了解编译器对高级语言的处理。什么时候能达到这样的境界呢?
我做题的习惯跟考试的习惯差不多,先找会做的,然后再慢慢啃不会的。本着一个原则,不用编译器,不去找答案,不会说明基础不牢固,继续补基础。
题目我截图过来。
上面的图是题目和给出的示例,示例是用来补充题目的,看着示例就知道什么时候应该返回 true ,什么时候返回 false 了。
LeetCode 都会给出每个题的函数定义,比如这个题的定义如下:
bool isValid(char* s) {
}
我选择的是 C 语言来答题。
这个题中告诉我们:
那么,我的思路是:
这个题就是 数据结构 中堆栈的应用,还是比较简单的。完整代码如下:
bool isValid(char* s) {
int len = strlen(s);
int i;
int pos = 0;
char *pArr = (char*)malloc(len * sizeof(char));
for (i = 0; i < len; i ++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
pArr[pos ++] = s[i];
}
if (s[i] == ')') {
if ( pArr[pos - 1] != '(' ) {
return 0;
} else {
pos--;
}
} else if (s[i] == '}') {
if ( pArr[pos - 1] != '{' ) {
return 0;
} else {
pos--;
}
} else if (s[i] == ']') {
if ( pArr[pos - 1] != '[' ) {
return 0;
} else {
pos--;
}
}
}
if (pos != 0) {
return 0;
}
return 1;
}
代码写的好不好就不管了,很多题都是 主调函数 释放空间,所以答题时,没有将 堆空间 释放掉,同样的 申请堆空间后,也没有判断内存是否申请成功。有很多地方写的不严谨,以后改正。
《PHP扩展模块开发之DLL编写与调用》课程已经录制完成,学习地址如下:
http://www.yzmedu.com/course/356
评论