2019/10/28【合并两个有序链表】&【括号生成】

题目一:【合并两个有序链表】力扣——21

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

#!/bin/bash
#合并两个有序链表
#author:yzt 2019-10-28
#
qian=`echo "$1"|awk -F , '{print $1}'|sed 's#->#\n#g'`    #将链表一存放到变量$qian中
hou=`echo "$1"|awk -F , '{print $2}'|sed 's#->#\n#g'`     #将链表二存放在变量$hou中
echo "$hou" >tmp.txt
declare -i aa=1
str=""
for i in $qian
do
        hou_1=`sed -n "$aa p" tmp.txt`
        str=$str$i,$hou_1,
        aa=$[$aa+1]
done
echo "$str"|sed 's#,$##'|sed 's#,#->#g'

脚本思路:

1、此脚本并非为有序链表,按照笔者个人理解写的。作用是在一个链表中间隔插入另一链表的元素

2、此脚本的关键是在遍历链表一的过程中,如何获取对应链表二的元素

脚本效果:

[root@localhost leetcode]# ./hebinglianggeyouxulianbiao.sh "1->2->4,3->5->7"
1->3->2->5->4->7
[root@localhost leetcode]# ./hebinglianggeyouxulianbiao.sh "1->2->4,13->15->17"
1->13->2->15->4->17
[root@localhost leetcode]# ./hebinglianggeyouxulianbiao.sh "111->112->114,13->15->17"
111->13->112->15->114->17

 

题目二:【括号生成】

给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。

例如,给出 n = 3,生成结果为:

[
  "((()))",
  "(()())",
  "(())()",
  "()(())",
  "()()()"
]

#!/bin/bash
#括号生成
#author:yzt 2019-10-28
#
cat /dev/null > tmp.txt
cat /dev/null >tmp1.txt
kuohao(){
        while :
        do
                test -s tmp.txt || echo "(" >tmp.txt
                for i in `cat tmp.txt`
                do
                        zuo=`echo "$i"|sed 's#[][]*#\n#g'|grep -v '^$'|sort |uniq -c|sed -n '1 p'|awk '{print $1}'`
                        you=`echo "$i"|sed 's#[][]*#\n#g'|grep -v '^$'|sort |uniq -c|sed -n '2 p'|awk '{print $1}'`
                        [ -z $you ]&& you=0
                        if [ $zuo -gt $you ];then
                                if [ $zuo -eq $1 ];then
                                        echo "$i)" >>tmp1.txt
                                else
                                        echo "$i(">>tmp1.txt
                                        echo "$i)">>tmp1.txt
                                fi
                        else
                                if [ $zuo -eq $1 ];then
                                        cat tmp.txt
                                        exit 0
                                else
                                        echo "$i(" >>tmp1.txt
                                fi
                        fi
                done
                        cat tmp1.txt >tmp.txt
                        cat /dev/null >tmp1.txt
        done
}

kuohao $1

 脚本逻辑:

1、生成括号的要素有以下两点:

第一:符号"("为左边第一个字符

第二:符号"("的个数等于符号")"的个数时,那么下一个只能是"(";若符号"("的个数大于符号")"的个数时,那么下一个符号可以为"("或者")"【前提是符号"("的个数暂未达到生成括号的个数】

 

脚本效果:

[root@localhost leetcode]# ./kuohaoshengcheng.sh 2
(())
()()
[root@localhost leetcode]# ./kuohaoshengcheng.sh 3
((()))
(()())
(())()
()(())
()()()
[root@localhost leetcode]# ./kuohaoshengcheng.sh 4
(((())))
((()()))
((())())
((()))()
(()(()))
(()()())
(()())()
(())(())
(())()()
()((()))
()(()())
()(())()
()()(())
()()()()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值