每天一個js小算法(日更 21天) - V 2.0

這是Verse 2 第一篇在每天一個js小算法(日更 21天) 是FCC的基礎(chǔ)算法部分 這篇則是進階算法 有點難度估計會花點時間

沒有看第一篇的同學(xué)(吃瓜不明真相的群眾) 可以點進去觀看(鏈接如上) 如果懶 我再把它在貼出來

開始找有沒有可以學(xué)習(xí)或者練習(xí)基本算法的學(xué)習(xí)平臺或者課程
有很多推薦的我就例舉幾個 其他的請各位自行百度

首選 其他
- CodeWar codewar - Leecode Leecode很多大神都用這個去刷題 我只是聽說但從未刷過一道題
- FCC freecodecamp - 考研的同學(xué)刷機試題 判茄梗客 求職的同學(xué)還可以刷面試題 很牛皮

有哪些學(xué)習(xí)算法的網(wǎng)站推薦标锄?
另外看到了其他幾個聽說超級有用不知真假
geeksforgeeks
一個小學(xué)生的算法競賽題庫
Lintcode 這個我逛了逛也可以的
看了以上幾個網(wǎng)站以及回答 我選擇了之前寫過一些東西的FCC 因為都是基礎(chǔ)的 也不想一步登天且這種白日夢不存在的 so 腳踏實地的開始

規(guī)則如下:

  1. 如果當(dāng)天不完成或者各種理由推拖了 次日補
  2. 不能找答案(原則性問題不得觸犯) 沒能做出來或?qū)崿F(xiàn)時間影響了日常工作 作為標(biāo)記跳過 以后再來刷
  3. 解決思路+代碼注釋
    if 但凡是觸犯了以上任意規(guī)則 自動退出 不在更新 發(fā)朋友圈一張自己最丑的圖且截圖放到此Blog (女人...不對...男人就要對自己狠一點)

不求數(shù)量 但求質(zhì)量

為了以后寫代碼順暢些 沒別的愿景 因為一旦卡住我腦子就會陷入一種很難描述的情況
抓狂+1000個黑人問號臉 => 百度 => change code =>百度 的死循環(huán)
每次都是到了第二天腦子順暢的時候一會兒就實現(xiàn)了 這種現(xiàn)象我表示很迷

7月30日

12:13:42 早晨一直看書(js語言精粹)到剛剛 因為今天老板不在 一刻不停歇的看書 就擔(dān)心他回來開會 又是一堆需求沒辦法學(xué)習(xí)了(這樣說是不是太裝逼 會被打) 書上知識點同時我會更新到另一篇blog js語言精粹 正在看剛到一半兒

  1. 實現(xiàn)兩個數(shù)字之間所有數(shù)字的和
    Sum All Numbers in a Range
function factorialize(num) {
  if (num < 0) { 
        return -1; 
    } else if (num === 0 || num === 1) { 
        return 1; 
    } else { 
        return (num * factorialize(num - 1)); 
    } 
}

/*公式方法*/
function sumAll(arr) {
  return (arr[0] + arr[1])*(Math.abs(arr[0] - arr[1]) + 1)/2;      (a+b)×(b-a+1)÷2
}

講道理還是數(shù)學(xué)公式好事,但是用reduce()方法沒做 對 就是因為懶

  1. 兩個數(shù)組做差 python直接一個方法就搞定了
    indexOf() slice() concat() filter()
    Diff Two Arrays
function diff(arr1, arr2) {
  return arr1.filter(function(v){
    return arr2.indexOf(v)==-1;
  }).concat(arr2.filter(function(v){
    return arr1.indexOf(v)==-1;
  }));  
}

diff([1, 2, 3, 5], [1, 2, 3, 4, 5]); 

還有一個麻煩一定的辦法 將傳的參數(shù)分別在做個循環(huán)然后塞進一個數(shù)組 并返回 其實一個道理 所以我覺得數(shù)組這些方法的底層實現(xiàn)跟我這個方法類似 所以 找找每個Array的方法底層實現(xiàn)源碼

  1. 數(shù)字轉(zhuǎn)換成羅馬數(shù)字 這個先放一放 等有思路了在來
    indexOf() splice() join()
    Roman Numeral Converter

  1. **** 這個沒看懂 我.....
    indexOf() splice() join()
    Where art thou

  1. 替換字符串中指定字符 看參數(shù) 即可明白 終于有一個能做了????????????????????
    replace() splice() join()
    Search and Replace
function myReplace(str,before,after){ 
  if(before[0] === before[0].toUpperCase()){ 
    after = after[0].toUpperCase() + after.slice(1); 
  } 
  str = str.replace(before,after);
  return str; 
}
myReplace("A quick brown fox jumped over the lazy dog", "jumped", "leaped");

這個是最容易想到的 也有別的思路 但是我今天得早點回家 交房租~~~ F**K!!!

7月31日

09:18:30
昨天下班時間看了你有多久沒更新過簡歷了? 很有感觸 萬一自己以后想跳槽去好一點的公司不再小公司廝混自己單挑獨斗 簡歷必然是重要的 腦子里一直回想要不刷個面試題?要不寫個刷面試題的Blog潮峦? 算了,一個一個來太急反而適得其反 把眼前的stuff寫完然后在bb or yy

  1. 把指定的字符串翻譯成 pig latin 直到找到第一個元音 把第一個原因之前的str 截取并拼接到最后 str的第一個字符就是元音 str+"way" 這道題我竟然花了30分鐘 花了兩種方法 這個簡便一些也看著更順
    另一種是我把str分成數(shù)組去做的有一點點麻煩
    indexOf() split() join() push()
    Pig Latin
function translate(str) {
 var _yuan = ["a","e","i","o","u"];
  if(_yuan.indexOf(str[0]) >= 0){ 
    return str + "way"; 
  } 
  while(_yuan.indexOf(str[0]) < 0){ 
    str = str.substr(1) + str.substr(0,1); 
  } 
  return str + "ay";

}

translate("california");

// 2. 未完成~~~
function translate(str) {
  var _yuan = ['a','e','i','o','u']
  var new_arr = str.split("")
  var ae = []
  new_arr.forEach((item)=>{ 
    if(_yuan.indexOf(item)!==-1){
      ae.push(item)
    }
  })
console.log(new_arr.join("").substr(new_arr.indexOf(ae[0]))+"ay")
}

translate("california");

8月1日

09:57:40
1.字母序列中找到缺失的字母并返回它,如果所有字母都在序列中勇婴,返回 undefined
遍歷字符串忱嘹,如果前一個字符的ASCII碼不是后一個字符ASCII碼+1,就判斷為丟失字符耕渴,返回丟失的字符德谅。
丟失的字符只能通過ASCII碼的轉(zhuǎn)換來獲得。
charCodeAt() | fromCharCode()
Missing letters

function fearNotLetter(str) {
   for(var i=0,len=str.length;i<len;i++){
   var _tag= str.charCodeAt(i+1)-str.charCodeAt(i);
   if(_tag>1){
     return String.fromCharCode(str.charCodeAt(i)+1);
   }
 }
  return undefined;
}

fearNotLetter("abce");

今天就忙著新項目搭建和規(guī)劃 基本沒時間寫 又來了一個項目 小程序的在線教育 雙語的~~~又開始寫小程序了

8-2

21:43
**現(xiàn)在人在深圳 老板帶我一起來談個項目 才拿到手機 手機碼字太辛苦 早上突然要求我穿干凈的衣服來 我呵呵了 平時不干凈萨螺? 明天回去補…… **


11:00:57
1. 檢查值是否是基本boolean 并返回 true or false
Boo Who

function boo(bool) {
  return typeof bool==='boolean';
}
boo(null);

16:21:05
2.數(shù)組去重 且 返回給定數(shù)組的原始順序排序
Sorted Union

function unite(arr1, arr2, arr3) {
  //類數(shù)組=>數(shù)組
  var args = Array.from(arguments)
  //合并為一維數(shù)組
  var arr = args.reduce((a,c)=> a.concat(c));
  // 數(shù)組去重
  return arr.filter((item,index)=>arr.indexOf(item) === index)
}
unite([1, 3, 2], [5, 2, 1, 4], [2, 1]);

8 - 8

12:02:22
今天把Fcc的中級過了窄做,這個算法都進行了多少天了 該加快進度了 之前一直在寫小程序 現(xiàn)在有時間了 之前廢話太多 沒效率 這次擼起袖子就是干

1.將字符串中的字符 &愧驱、<、>椭盏、" (雙引號), 以及 ' (單引號)轉(zhuǎn)換為它們對應(yīng)的 HTML 實體组砚。
Convert HTML Entities

// 簡單粗暴法
function convert(str) {
 return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;");
  }
convert("Dolce & Gabbana");

// 這個是另一種思路 對象~~~
function convert(str) {
  var obj={
    "&":'&amp;',
    '<':'&lt;',
    '>':'&gt;',
    '"':'&quot;',
    "'":'&apos;'
  };
  var arr = str.split(" ");
  var result = arr.map(function(val){
    if(obj.hasOwnProperty(val)){
      return obj[val];
    }else{
      return val;
    }
  });
  return result.join("");
}
convert("Dolce & Gabbana");

2.將字符串轉(zhuǎn)換為 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 這種形式的掏颊,也就是以連字符連接所有小寫單詞糟红。
Spinal Tap Case

// 這個只能用于有空格的
function spinalCase(str) {
  return str.split(" ").map((item) => item.toLowerCase()).join("-") 
}
spinalCase('ThisIsSpinalTap');
// 所以Fcc推薦用正則 還是用正則去寫吧
function spinalCase(str) {
  str = str.replace(/_/g," ")
        .replace(/([A-Z])/g," $1")
        .replace(/^\s/,"")
        .replace(/\s+/g,"-")
        .toLowerCase();
  return str;
}
spinalCase('This Is Spinal Tap');

3.求小于等于給定數(shù)值的質(zhì)數(shù)之和。
Sum All Primes

function sumPrimes(num) {
    var sum=0;
    for (var i = 2; i <= num; i++) {
        var flag=true;
        for(var j=2;j<i;j++){
            if(i%j==0){
                flag=false;
                break;
            }
        }
        if(flag) sum+=i;
    }
return sum
}
sumPrimes(10)

8月9日

11:34:05
1.寫一個 function乌叶,它遍歷數(shù)組 arr盆偿,并返回數(shù)組中第一個滿足 func 返回值的元素。舉個例子准浴,如果 arr 為 [1, 2, 3]事扭,func 為 function(num) {return num === 2; },那么 find 的返回值應(yīng)為 2乐横。
Finders Keepers

// 第一種方案
  function find(arr, func) {  
    var arr_n = arr.map((item)=>{
      if(func(item)){
        return item;
      }
    })
    arr_n = arr_n.filter((item)=>{
      return typeof(item)!='undefined'
    })
    return arr_n.length === 0 ? undefined : arr_n[0];
  }

find([1, 3, 5, 8, 9, 10], function(num){ return num % 2 === 0; });
//第二種方案
function findElement(arr, func) {
  let arr1 = arr.filter((val) => {
    return func(val);
  });

  return arr1.length === 0 ? undefined : arr1[0];
}

14:47:34 我卡死在這里了 想了很久(吃飯+休息+上廁所) 終于..............?????????? 徹底沒了思路 很開心 撒花(mmp) 完全歸于今天狀態(tài)不好 昨天沒睡好 早上拉肚子等各種理由 看書 然后回來再想想 也許就想明白了 好多都不會 fuck

我有一個大膽的想法 就是每天統(tǒng)計自己寫了多少代碼 或者 不停的編程 所以我寫了Bloging的突發(fā)奇想

2.規(guī)則講述的模棱兩可 什么賣隊友了什么中單了 哈哈哈 直接看結(jié)果 如下
Drop it

drop([1, 2, 3, 4], function(n) {return n >= 3;}) 應(yīng)該返回 [3, 4]求橄。
drop([0, 1, 0, 1], function(n) {return n === 1;}) 應(yīng)該返回 [1, 0, 1]。
drop([1, 2, 3], function(n) {return n > 0;}) 應(yīng)該返回 [1, 2, 3]葡公。
drop([1, 2, 3, 4], function(n) {return n > 5;}) 應(yīng)該返回 []罐农。
drop([1, 2, 3, 7, 4], function(n) {return n > 3;}) 應(yīng)該返回 [7, 4]。
drop([1, 2, 3, 9, 2], function(n) {return n > 2;}) 應(yīng)該返回 [3, 9, 2]催什。
// 題要是這么簡單就好了 還有種情況沒考慮
//function drop(arr, func) {
//  return arr.filter((item)=>{
//    return func(item)
//  })
//}
//drop([1, 2, 3], function(n) {return n < 3; });

function drop(arr, func) {
  arr.map((item,index)=>{
    if(!func(arr[index])){
    return arr.splice(index,1,"nonono")
   }
  })
    return arr.filter((item)=>{
        return item !="nonono"
    })
}

function drop(arr, func) {
    try {
        arr.forEach((item, index) => {
            if (func(arr[index]) === false) {
                arr.splice(index, 1, "nonono")
            } else {
                throw new Error("結(jié)束循環(huán)~~~")
            }
        })
    } catch (e) {
            if(e.message !=="結(jié)束循環(huán)~~~") throw e
    }
    return arr.filter((item) => {
        return item != "nonono"
    })
}
drop([0, 1, 0, 1], (n)=> {return n === 1})

跳出for break 但是跳出forEach 要用try catch okay了

3.對嵌套的數(shù)組進行扁平化處理涵亏。你必須考慮到不同層級的嵌套。 這個就是兩套 遞歸繼續(xù)扁平化+判斷是否是數(shù)組 let's do this
Steamroller

function steamroller(arr) {
  var new_arr = []
  function asdf(ifarr){
    if(Array.isArray(ifarr)){
    return ifarr.forEach((item)=>{return asdf(item)})
    }else new_arr.push(ifarr)
  }
  asdf(arr)
  return new_arr
}

steamroller([1, [2], [3, [[4]]]]);
steamroller([[["a"]], [["b"]]])

很好 我又卡住了??????????
過了半個小時我找到解決方案 就是用閉包
阮一峰大神 閉包
這個方法得記住以后寫代碼就得這么用閉包 經(jīng)常遇到這種結(jié)構(gòu)的代碼 每次都會處理很久 把內(nèi)部處理數(shù)組的部分也寫成函數(shù)去處理 遞歸也好寫

4.傳入二進制字符串蒲凶,翻譯成英語句子并返回气筋。
parseInt 進制轉(zhuǎn)換
Binary Agents

function binaryAgent(str) {
        //str-> array
    str = str.split(" ");
//循環(huán)做進制轉(zhuǎn)換
    var new_str = str.map(function (item) {
        return parseInt(item, 2);
    });
    var str1 = "";
// 循環(huán) 返回使用指定的Unicode值序列創(chuàng)建的字符串  然后拼接字符串 done
    new_str.forEach(function (item) {
        str1 += String.fromCharCode(item);
    });
    return str1;
}

binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111");

發(fā)現(xiàn)超級超級嚴重的問題 每題都沒寫注釋 翻看就蛋疼了

5.完善編輯器中的every函數(shù),如果集合(collection)中的所有對象都存在對應(yīng)的屬性(pre)豹爹,并且屬性(pre)對應(yīng)的值為真裆悄。函數(shù)返回ture矛纹。反之臂聋,返回false。
Everything Be True

function every(collection,pre){
//循環(huán)判斷屬性
  for(var i in collection){
    if(!collection[i][pre]){
      return false;
    }
  }
  return true;
}
// 用array.every()方法 所有項都為true 才返回true
function every(collection, pre) {
  // Is everyone being true?
  return collection.every(function(item,index,array){
    return item[pre];
  });
}

every([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex");

這題還是好做一點 上一題花了點時間
17:56:20
6.創(chuàng)建兩個參數(shù)之和func 如果只提供了一個參數(shù)或南,則返回一個函數(shù)孩等,這個函數(shù)與原來的函數(shù)功能要一樣 如果任何一個參數(shù)不是有效數(shù)字,則返回undefined
Arguments Optional

function add() {
    // 類數(shù)組=> 數(shù)組
    var args = Array.prototype.slice.call(arguments);
    //判斷是否是number
    var result = args.every(function (item) {return Number.isFinite(item)})

    if (result === false) 
        return undefined
    else if (args.length === 2)
        return args[0] + args[1]
    // 參數(shù)是一個但是二次執(zhí)行 返回函數(shù)
    else 
        //保留參數(shù)一的值
        var first = args[0]
        //返回一個函數(shù) 把第二次執(zhí)行需要的參數(shù)與第一次相加
        return (b) => {
            if (Number.isFinite(b)) {
                return first + b;
            } else {
                return undefined;
            }
        };
}

add(2)(3);

19:07:06
就這樣中級算法題也完成了??????????
這篇花的時間更久 相較于基礎(chǔ)篇 這篇的難度要大一點 具體收獲的還是翻閱百度書也好 還是有的
更多的是思考 思維方式上有了一丁點的轉(zhuǎn)變 不會把東西想的那么復(fù)雜 簡單化

最希望看到的畫面

我今天一整天時間全用來刷這6道題了 不知道是不是屬于浪費時間的行為
但是有些題找了很多方法 搜索查看了很多stuff 多少應(yīng)該有點用吧
把一些基本的數(shù)組方法都過了一遍 起碼會比以前快那么30s 也算是進步

其實當(dāng)今社會的人 不會"慢下來" 基于求成 以一種急躁的心態(tài)想完成當(dāng)前所做事情 結(jié)果往往都不盡人意 所以學(xué)會慢下來 告訴自己 踏踏實實一步一步來 那些所謂2個月學(xué)會 *** 都是浮云 騙無腦人群的 自己沉下來 別去思考學(xué)習(xí)資料全不全 會不會不夠 視頻質(zhì)量還不好學(xué)了會不會有效果 看了之后才能做評判不是么 人家說錯與對那是參照他們的情況和他們的思考方式 自己呢采够?所以還是踏踏實實的 沉住氣 加油~~~
自己之前寫過一點東西 但是一直不好意思o(jì)pen it 就是一些片面的思考跟見解 不足以放到網(wǎng)上騙取吃瓜群眾的眼光 多看看書在思考思考 在放出來吧

完結(jié)撒花~~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肄方,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蹬癌,更是在濱河造成了極大的恐慌权她,老刑警劉巖虹茶,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異隅要,居然都是意外死亡蝴罪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門步清,熙熙樓的掌柜王于貴愁眉苦臉地迎上來要门,“玉大人,你說我怎么就攤上這事廓啊』端眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵谴轮,是天一觀的道長炒瘟。 經(jīng)常有香客問我,道長书聚,這世上最難降的妖魔是什么唧领? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮雌续,結(jié)果婚禮上斩个,老公的妹妹穿的比我還像新娘。我一直安慰自己驯杜,他們只是感情好受啥,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸽心,像睡著了一般滚局。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顽频,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天藤肢,我揣著相機與錄音,去河邊找鬼糯景。 笑死嘁圈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蟀淮。 我是一名探鬼主播最住,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怠惶!你這毒婦竟也來了涨缚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤策治,失蹤者是張志新(化名)和其女友劉穎脓魏,沒想到半個月后兰吟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡茂翔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年揽祥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檩电。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡拄丰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俐末,到底是詐尸還是另有隱情料按,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布卓箫,位于F島的核電站载矿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏烹卒。R本人自食惡果不足惜闷盔,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望旅急。 院中可真熱鬧逢勾,春花似錦、人聲如沸藐吮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谣辞。三九已至迫摔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泥从,已是汗流浹背句占。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躯嫉,地道東北人纱烘。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像和敬,于是被迫代替她去往敵國和親凹炸。 傳聞我的和親對象是個殘疾皇子戏阅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 友情提示:此博客較長 需要您8-12分鐘時間閱讀 有FCC的初級算法題 和 一些有的沒的分享另外中級篇 每天一個j...
    zz77zz閱讀 17,139評論 20 119
  • FCC:GitHub - FreeCodeCamp/FreeCodeCamp: The https://FreeC...
    不要吧我再睡會閱讀 1,434評論 4 8
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,216評論 0 4
  • 天燈掛田間昼弟, 寒氣襲人面。 四周凄寂寂奕筐, 唯有水潺潺舱痘。 無名詞 冷風(fēng)鉆袖变骡,對紅霞晚。夕陽消得一瞬間芭逝。獨立田垅施肥水...
    明靜說閱讀 351評論 0 1
  • 夜?jié)u漸地黑下來塌碌,院子里站滿了一堆堆的人群。人聲鼎沸旬盯,他們在不住地吵鬧著什么台妆,讓剛剛從外面回來的若停下了腳步。豎起耳...
    麗莎老師閱讀 723評論 2 1