脑洞大开的翻转代码

介绍

有一个序列 abcdefgh, 假如想要让 abcdefgh 互换位置, 可以如何做呢?

这里介绍一种比较脑洞的解法.

  1. 先翻转子序列
    abc -> cba;
    defgh -> hgfed;

现在, 整个序列看起来就是这样 cbahgfed.

  1. 再翻转整个序列;

cbahgfed -> defghabc;

这样就,完成了 abcdefgh 的位置互换.

具有实用价值吗?

通常来说,翻转代码在时间和空间上都很高效(具体还是要看所使用的开发语言的特性),而且逻辑清晰,代码非常简短, 很难出错.

《编程珠玑》第二章的一段话很好的介绍了翻转代码的使用价值.

Brian Kernighan 和 P.J.Plauger 在其1981年出版的Software Tools in Pascal 一书中,就使用该代码在文本编辑器中实现了行的移动. Kernighan 报告称在第一次执行的时候程序就正确运行了, 而他们先前基于链表的处理相似任务的代码则包含几个错误. KenThompson 在 1971 年编写了编辑器和这种求逆代码, 甚至在那时就主张把该代码当作一种常识.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值