脑洞大开的翻转代码

30次阅读

共计 441 个字符,预计需要花费 2 分钟才能阅读完成。

介绍
有一个序列 abcdefgh, 假如想要让 abc 和 defgh 互换位置, 可以如何做呢?
这里介绍一种比较脑洞的解法.
先翻转子序列 abc -> cba; defgh -> hgfed;
现在, 整个序列看起来就是这样 cbahgfed.
再翻转整个序列;
cbahgfed -> defghabc;
这样就, 完成了 abc 和 defgh 的位置互换.
具有实用价值吗?
通常来说, 翻转代码在时间和空间上都很高效 (具体还是要看所使用的开发语言的特性), 而且逻辑清晰, 代码非常简短, 很难出错.
《编程珠玑》第二章的一段话很好的介绍了翻转代码的使用价值.
Brian Kernighan 和 P.J.Plauger 在其 1981 年出版的 Software Tools in Pascal 一书中, 就使用该代码在文本编辑器中实现了行的移动. Kernighan 报告称在第一次执行的时候程序就正确运行了, 而他们先前基于链表的处理相似任务的代码则包含几个错误. KenThompson 在 1971 年编写了编辑器和这种求逆代码, 甚至在那时就主张把该代码当作一种常识.

正文完
 0