【今天只写了一个题目,因为近期公司在周末有培训且解数独这道题脚本比较麻烦】
题目一:【报数】力扣——38
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: "1"
示例 2:
输入: 4
输出: "1211"
#!/bin/bash
#报数
#author:yzt 2019-11-04
#
read -t 20 -p "请输入一个正整数:" num
cat /dev/null >tmp.txt
for((i=1;i<=$num;i++))
do
if [ $i = 1 ];then
number=1
echo "1" >tmp.txt
else
number=""
content=`cat tmp.txt|sed 's#[.]*#\n#g'|grep -v "^$"|uniq -c`
for j in $content
do
number=$number$j
done
echo "$number" >tmp.txt
fi
done
echo "$number"
脚本解析:
1、此题报数其实是对数字的描述,比如11,即为(两个一)也就是21;而单独一个2为(一个二)也就是12;
2、明白了题目的意思后,笔者构思良久,发现shell中自带的uniq的命令就自带报数的功能
3、脚本关键点有:第一字符串转化为文档的每一行;去掉空行;第二:for循环
脚本效果:
[root@localhost leetcode]# ./baoshu.sh
请输入一个正整数:1
1
[root@localhost leetcode]# ./baoshu.sh
请输入一个正整数:2
11
[root@localhost leetcode]# ./baoshu.sh
请输入一个正整数:3
21
[root@localhost leetcode]# ./baoshu.sh
请输入一个正整数:4
1211
[root@localhost leetcode]# ./baoshu.sh
请输入一个正整数:5
111221
[root@localhost leetcode]# ./baoshu.sh
请输入一个正整数:6
312211
[root@localhost leetcode]# ./baoshu.sh
请输入一个正整数:23
11131221131211132221232112111312111213111213211231132132211211131221232112111312211213111213122 11213211321322112311311222113311213212322211211131221131211132221231122212213211321322112311311 22211331121321232221123113112221131112311332111213122112311311123112112322211211131221131211132 22123211211131221132211131221121321131211132221123113112211121312211231131122113221122112133221 12132113213221133112132123123112111311222112132113311213211231232112311311222112111312211311123 11332211213211321223112111311222112132113213221123123211231132132211231131122211311123113322112 11131221131211132221232112111312212321123113112211322112311322111312211213211321321112133221231 1322113212221