Shell是一种解释性的编程语言,它被广泛用于Linux和其他类Unix系统中的脚本编写。Shell编程可以帮助我们自动化一些任务,提高工作效率。同时,LeetCode是一个在线编程平台,提供了大量编程题目,可以帮助我们提高编程技能。在本文中,我们将介绍如何在Linux上使用Shell进行编程,并结合LeetCode的题目进行演示。
一、Shell编程基础
Shell编程可以在终端中进行,也可以将Shell脚本保存为文件执行。下面是一个简单的Shell脚本例子,用于输出当前时间和日期:
#!/bin/bash
echo "Current date and time: $(date)"
这个脚本的第一行指定了使用Bash解释器来运行脚本。第二行使用echo命令输出当前时间和日期,其中$(date)表示执行date命令并将结果插入到输出中。
使用chmod命令可以将脚本文件设置为可执行:
chmod +x script.sh
然后就可以执行脚本了:
./script.sh
二、使用Shell编写LeetCode题目
LeetCode提供了大量的编程题目,可以帮助我们提高编程能力。下面我们将演示如何使用Shell编写LeetCode题目中的两道题目。
- 两数之和
题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解题思路:
可以使用一个哈希表来存储每个数字的索引,然后遍历数组,查找是否存在另一个数字与当前数字的和为目标值。如果找到了这样的数字,就返回它们的下标。
演示代码:
#!/bin/bash
declare -A map
nums=(2 7 11 15)
target=9
for ((i=0; i<${#nums[@]}; i++)); do
complement=$((target-${nums[i]}))
if [ ${map[$complement]+_} ]; then
echo "[${map[$complement]} $i]"
exit 0
fi
map[${nums[i]}]=$i
done
这个脚本使用了一个哈希表来存储每个数字的索引,然后遍历数组,查找是否存在另一个数字与当前数字的和为目标值。如果找到了这样的数字,就输出它们的下标。
- 有效的括号
题目描述:
给定一个只包括 "(",")","{","}","[","]" 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例:
输入: "()[]{}"
输出: true
输入: "([)]"
输出: false
解题思路:
可以使用一个栈来模拟括号的匹配过程。遍历字符串,如果遇到左括号,则将其入栈;如果遇到右括号,则将栈顶元素出栈并判断是否匹配。如果不匹配,则返回false;如果全部遍历完字符串后栈不为空,则返回false。
演示代码:
#!/bin/bash
s="()[]{}"
declare -a stack
top=-1
for ((i=0; i<${#s}; i++)); do
if [ "${s:i:1}" == "(" -o "${s:i:1}" == "[" -o "${s:i:1}" == "{" ]; then
stack[++top]=${s:i:1}
elif [ $top -ge 0 -a "${s:i:1}" == ")" -a "${stack[$top]}" == "(" ]; then
unset stack[$top]
top=$((top-1))
elif [ $top -ge 0 -a "${s:i:1}" == "]" -a "${stack[$top]}" == "[" ]; then
unset stack[$top]
top=$((top-1))
elif [ $top -ge 0 -a "${s:i:1}" == "}" -a "${stack[$top]}" == "{" ]; then
unset stack[$top]
top=$((top-1))
else
echo "false"
exit 0
fi
done
if [ $top -eq -1 ]; then
echo "true"
else
echo "false"
fi
这个脚本使用了一个栈来模拟括号的匹配过程。遍历字符串,如果遇到左括号,则将其入栈;如果遇到右括号,则将栈顶元素出栈并判断是否匹配。如果不匹配,则返回false;如果全部遍历完字符串后栈不为空,则返回false。
三、总结
本文介绍了如何在Linux上使用Shell进行编程,并结合LeetCode的题目进行演示。Shell编程可以帮助我们自动化一些任务,提高工作效率。同时,LeetCode提供了大量的编程题目,可以帮助我们提高编程能力。希望本文对您有所帮助。