有效的括号
链接:20. 有效的括号力扣
题目描述:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例:
输入:s = "()"
输出:true
解题思路:
本题用栈可以很轻松的实现当左括号出现的时候入栈,当右括号出现的出栈,如果匹配就继续,不匹配就错误当字符串遍历完成之后,栈内仍有字符串就错误用一个数组进行和一个记录栈顶值的int进行了栈的模拟。
代码实现
bool isValid(char * s){
int len = strlen(s);
int stack[len];
int top = -1;
for(int i = 0; i< len; ++i){
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
stack[++top] = s[i];
else{
if(top < 0) return false;
if(s[i] == ')'){
if(stack[top] != '(') return false;
else top--;
}
if(s[i] == '}'){
if(stack[top] != '{') return false;
else top--;
}
if(s[i] == ']'){
if(stack[top] != '[') return false;
else top--;
}
}
}
if(top >= 0) return false;
return true;
}
字符串数字相加
链接:415. 字符串相加415. 字符串相加 - 力扣(Leetcode)
题目描述:
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger
), 也不能直接将输入的字符串转换为整数形式。
示例:
输入:num1 = "11", num2 = "123"
输出:"134"
解题思路:
最低位开始相加填入字符数组。
代码实现
char res[10003] = {'\0'};
char * addStrings(char * num1, char * num2){
int s1 = strlen(num1),s2 = strlen(num2),len = 10001,carry = 0;
for(s1--, s2--; s1>=0 || s2>=0 || carry;){
carry += (s1>= 0? num1[s1--]-'0' :0) + (s2>= 0? num2[s2--]-'0': 0);
res[len--] = carry%10 + '0';
carry/=10;
}
return &res[len+1];
}
二进制求和
链接:67. 二进制求和67. 二进制求和 - 力扣(Leetcode)
题目描述:
给你两个二进制字符串 a
和 b
,以二进制字符串的形式返回它们的和。
示例:
输入:a = "11", b = "1"
输出:"100"
解题思路:
同上,最低位开始相加填入字符数组,注意二进制。
代码实现
char res[10003] = {'\0'};
char * addBinary(char * a, char * b){
int s1 = strlen(a),s2 = strlen(b),len = 10001,carry = 0;
for(s1--, s2--; s1>=0 || s2>