1. 程式人生 > >左耳聽風第二週

左耳聽風第二週

左耳聽風第二週

每週完成一個ARTS: 每週至少做一個 leetcode 的演算法題、閱讀並點評至少一篇英文技術文章、學習至少一個技術技巧、分享一篇有觀點和思考的技術文章。(也就是 Algorithm、Review、Tip、Share 簡稱ARTS)

Algorithm

  1. 最大回文數乘積 連結 解題語言 C#

題目 :

你需要找到由兩個 n 位數的乘積組成的最大回文數。

由於結果會很大,你只需返回最大回文數 mod 1337得到的結果。?
示例:

輸入: 2

輸出: 987

解釋: 99 x 91 = 9009, 9009 % 1337 = 987

說明:

n 的取值範圍為 [1,8]。

【 參考程式碼 】

public class Solution
    {
       public int LargestPalindrome(int n)
        {
            if (n == 1)
            { return 9; }
            int max =(int)Math.Pow(10,n)-1;
            for (int i= max-1; i>max/10;i--)
            {
                StringBuilder str =
new StringBuilder(); foreach (var j in i.ToString().Reverse()) { str.Append(j); } long maxNum = Convert.ToInt64(i.ToString()+str.ToString());//因為當 n>1 時,最大的迴文數的位數一定為 2n 位,左右一定對稱,這裡縮小迴圈的遍歷範圍 for (long x =
max; x * x >= maxNum; x--) if (maxNum % x == 0) return (int)(maxNum % 1337); } return 0; } }

這道題的難點在於縮小迴圈遍歷的範圍,只用暴力在n=4 的時候就會超時。 首先 當 n>1 時 最大回文數的位數 必定為 2n ,這樣我們就能把 迴文數分成左右兩部分, 然後重點在於內嵌的 for 迴圈 x的平方要 大於等於此時的最大 迴文數 此時才能保證最終找到的迴文數是最大的那個。 程式碼的思想參考了網上的答案, 希望能在下週有所進步。

Review

How To Ask Questions The Smart Way
(英文版)連結
(中文版)連結
文章是耗子叔在專欄 程式設計師練級攻略–修養篇 推薦過的,不知道有多少人看下去了呢,英文版真的很長?
感悟:文章主要時講述計算機方面如何更好的提問以及如何更好的回覆別人的問題, 但實際可以很好的運用在各個學科的問答環節中。
首先, 明確一點好的問題大家一定是願意回答的, 因為這會讓人發散思維, 從而提高自己 。 所以在提問前先問自己 : 是否問了正確的問題 ? 是否問了正確的人?

擺正問問題的心態

通常我們總是習慣性的向朋友提問, 很多時候我們會因為沒有收到自己心儀的回答而氣急敗壞, 這是很錯誤的思維。 在當前的社會背景下, 付費尚且不一定能得到滿意的答覆又何必奢望別人免費且義務性的回答我們的問題呢? 這種不勞而獲的思想本身就是錯誤的。 所以在問問題之前先擺正自己的心態,別人回答我們的問題, 我們要學會感謝, 不回答我們的問題本是應該而不氣急敗壞的咒罵。

自己動手豐衣足食

先谷歌, 再求人。 別人的迴應肯定是要一定的時間的, 與其耽誤別人的時間欠下別人的人情, 不如自己動手把問題解決了, 即使沒有, 你的努力也會讓你更接近答案、別人也樂於幫助主動性強的人。重要的一點是, 你要明白。最有可能給你有用答案的人, 往往是你身邊最忙的人。 ( 如果不會翻牆就用必應代替谷歌把 , 至少比百度搜索出來的東西更貼近你的需要 )

問對人

專業的事情找專業的人做。 不要總是做 問體育老師 數學問題這種事。 旁觀者的你肯定覺得好笑。 可是技術社群, 跑到後端語言社群問前端專案問題的不在少數, 雖然也有可能收到正確的答案, 但通常你向數學老師請教會更快的收到正確的答案, 可能他還會告訴你解決相同的方法, 給你做一個深入的講解, 而不是隻丟給你一個有可能正確的答案或是過程。 資訊時代, 效率至上。

學會簡化問題

在講清楚問題的同時, 儘可能的簡化語言。 正確的提問不要將別人寶貴的時間 浪費在 “ 在不在 ”“ 能不能幫我個忙 ” 這種無意義的對白上。 下次問問題找人幫忙之前, 先發個小紅包, 然後直接說問題。 你會收到更多有意義的回覆, 這一部分節約的時間的價值遠大於你發出去的小紅包。
說清問題, 再說推斷
先描述清楚問題的整體情況再提出自己對問題的推斷。 通常來說, 自己所推斷的方向是錯誤的, 因為如果是對的, 自己就能把問題解決了何必要麻煩別人來幫忙? 所以過早的提出你對問題的推論, 很有可能帶偏別人的思考, 往往會耽誤你解決問題的時間。

留下答案

將別人給你的答案在你問題的結尾或標題標註。 你所提問的或許正是別人所需要的。 贈人玫瑰, 手有餘香。 請傳承好真正的黑客精神( 開源 )。

授人以魚,不如授人以漁

更多用解決問題的思路來代替簡單的給人答案。

寬容初學者

畢竟大家都是從小菜雞過來的, 誰沒經歷過百度都不會的時期呢。

不會不說

不去故意的誤導別人, 不把不缺定的答案用肯定且真理的口氣說出來, 摸稜兩可的答案可說但請註明。 損人不利己之事不可做。

Tip

https://github.com/limedroid/HexoLearning
Hexo + GitHub 搭建自己的部落格, CSDN的部落格廣告太多了, 這樣非常影響別人瀏覽的使用者體驗,後面文章多起來了肯定還是要有自己的部落格的, 可以先參照教程搭建一下先做準備。

share

文章連結

分享的是我根據耗子叔 《 程式設計師練級攻略 》推薦的 C 語言的書 《 C 語言程式設計 現代方法 》第二版 第二星期的筆記整理, C 語言學到以前沒有接觸的指標, 進度已經遠沒有第一週那麼快了, 關鍵還是要弄清楚 指標什麼時候指向地址 ,什麼時候代表值, 話說 C語言指標的騷操作真不少。