leetcode-194 Transpose File

感觉很扯淡的一题,自己写的总是memory limit exceed或者time limit exceed

memory limit exceed

#!/bin/bash
cols=$(head -n 1 file.txt | wc -w) //统计有多少列
for((i=1; i<=$cols; i=i+1)){
     line=$(cut -d ' ' -f ${i} file.txt)
     res=""
     for tmp in $line
     do
         res=${res}" "$tmp
     done
     echo ${res}
}
time limit exceed(如果只有一列,会造成死循环)

在只有一列的情况下:

cut -d ' ' -f  2 file.txt 取出来的其实是第一列

i=1
col=$(cut -d ' ' -f ${i} file.txt)
while [  "$col" != "" ]
do
    line=""
    for tmp in $col
    do
        line=${line}" "${tmp}
    done
    echo ${line}
    i=$(($i+1))
    col=$(cut -d ' ' -f ${i} file.txt)
done
改进后,不会time limit exceed,但是又会memory limit exceed
i=1
col=$(cut -d ' ' -f ${i} file.txt)
while [  "$col" != "" ]
do
    line=""
    for tmp in $col
    do
        line=${line}" "${tmp}
    done
    echo ${line}
    i=$(($i+1))
    nextcol=$(cut -d ' ' -f ${i} file.txt)
    [ "$nextcol" == "$col" ] && exit 0
    col=${nextcol}
done


参考的答案才能AC

#!/bin/bash
awk '
{
    for(i=1;i<=NF;i++){
        if(NR==1){
            s[i]=$i;
        }else{
            s[i]=s[i]" "$i;
        }
    }
}  
END{
    for(i=1;s[i]!="";i++)
        print s[i];
}
' file.txt

awk居然还能这么用,END又是什么东西,还有相似的但貌似更完善的答案,关于awk的更多知识,可以参考:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

私房菜上讲的明显不够

awk '
{ 
    for (i=1; i<=NF; i++)  {
        a[NR,i] = $i
    }
}
NF>p { p = NF } //条件类型{动作},没有给p赋值,p应该为0
END {    
    for(j=1; j<=p; j++) {
        str=a[1,j]
        for(i=2; i<=NR; i++){
            str=str" "a[i,j];
        }
        print str
    }
}' file.txt

参考:http://bookshadow.com/weblog/2015/03/28/leetcode-transpose-file/

这个网站很多leetcode上的解答



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值