C语言leetcode
时间: 2025-02-19 10:33:09 浏览: 40
### C语言 LeetCode 题目及解答
#### 有效括号验证
在LeetCode上有一个经典问题即判断给定的字符串中的括号是否合法[^1]。此题目的核心在于利用栈结构来匹配成对出现的大、中、小三种类型的括号。
对于这个问题的一个可能解法如下所示:
```c
bool isValid(char * s){
int length = strlen(s);
char stack[length];
int top = -1;
for (int i = 0; i < length; ++i) {
switch (s[i]) {
case '(':
case '[':
case '{':
stack[++top] = s[i]; // Push to stack
break;
case ')':
if(top == -1 || stack[top--]!='(' ) return false;
break;
case ']':
if(top == -1 || stack[top--]!= '[') return false;
break;
case '}':
if(top == -1 || stack[top--]!= '{') return false;
break;
}
}
return top == -1 ? true : false;
}
```
上述函数`isValid`接收一个字符指针作为参数并返回布尔值表示输入串内的括号配对情况。当遇到左半边括号时将其压入栈内;而每当遇见右半边括号,则尝试弹出栈顶元素并与当前符号对比,如果不相等则说明不匹配直接返回假。最后还需确认遍历结束后栈为空才能证明整个序列完全闭合从而返回真。
#### 字符串转换整数 (atoi)
另一个常见的问题是实现简单的 `myAtoi(string s)` 函数,该函数将字符串转换为32位带符号整数(类似于C/C++ 中的 atoi 函数),同样可以使用状态机的方式处理各种边界条件[^4]。
这里给出一种简化版的做法:
```c
int myAtoi(char* str) {
long res = 0L;
int sign = 1;
while (*str == ' ') { str++; } /* Skip leading spaces */
if(*str=='-'||*str=='+'){
sign=(*str=='-')?-1:1;
str++;
}
while ('0' <= *str && *str <= '9') {
res = res * 10 + *str - '0';
if(res >= INT_MAX && sign == 1) return INT_MAX;
if(-res <= INT_MIN && sign == -1) return INT_MIN;
str++;
}
return res * sign;
}
```
这段代码实现了基本的功能需求,并考虑到了正负号以及溢出的情况。
阅读全文
相关推荐














