腦洞大開的翻轉代碼

介紹

有一個序列 abcdefgh, 假如想要讓 abcdefgh 互換位置, 可以如何做呢?

這裏介紹一種比較腦洞的解法.

  1. 先翻轉子序列
    abc -> cba;
    defgh -> hgfed;
    現在, 整個序列看起來就是這樣 cbahgfed.

  2. 再翻轉整個序列;
    cbahgfed -> defghabc;

這樣就,完成了 abcdefgh 的位置互換.

具有實用價值嗎?

通常來說,翻轉代碼在時間和空間上都很高效(具體還是要看所使用的開發語言的特性),而且邏輯清晰,代碼非常簡短, 很難出錯.

《編程珠璣》第二章的一段話很好的介紹了翻轉代碼的使用價值.

Brian Kernighan 和 P.J.Plauger 在其1981年出版的Software Tools in Pascal 一書中,就使用該代碼在文本編輯器中實現了行的移動. Kernighan 報告稱在第一次執行的時候程序就正確運行了, 而他們先前基於鏈表的處理相似任務的代碼則包含幾個錯誤. KenThompson 在 1971 年編寫了編輯器和這種求逆代碼, 甚至在那時就主張把該代碼當作一種常識.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章