最近在學python,網上很難找到對應的算法題網站,專業算法網站大部分都是國外的,以前在w3cschool看到有三個級別的Javascript腳本算法挑戰,嘗試用python實現,代碼量相對比較少,若是你有更好的解法,還請不吝賜教,初學python,但願和你們一塊兒日有所長。python
目錄git
1.判斷電話號碼算法挑戰程序員
5.排列組合去重算法挑戰app
若是傳入字符串是一個有效的美國電話號碼,則返回 true
.
用戶能夠在表單中填入一個任意有效美國電話號碼. 下面是一些有效號碼的例子(還有下面測試時用到的一些變體寫法):
555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555
在本節中你會看見如 800-692-7753
or 8oo-six427676;laskdjf
這樣的字符串. 你的任務就是驗證前面給出的字符串是不是有效的美國電話號碼. 區號是必須有的. 若是字符串中給出了國家代碼, 你必須驗證其是 1
.若是號碼有效就返回 true
; 不然返回 false
.
建立一個函數,接受兩個或多個數組,返回所給數組的 對等差分(symmetric difference)(△
or ⊕
)數組.
給出兩個集合 (如集合 A = {1, 2, 3}
和集合 B = {2, 3, 4}
), 而數學術語 "對等差分" 的集合就是指由全部只在兩個集合其中之一的元素組成的集合(A △ B = C = {1, 4}
). 對於傳入的額外集合 (如 D = {2, 3}
), 你應該安裝前面原則求前兩個集合的結果與新集合的對等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}
).
sym([1, 2, 5], [2, 3, 5], [3, 4, 5])
應該返回 [1, 4, 5]
設計一個收銀程序 checkCashRegister()
,其把購買價格(price
)做爲第一個參數 , 付款金額 (cash
)做爲第二個參數, 和收銀機中零錢 (cid
) 做爲第三個參數.
cid
是一個二維數組,存着當前可用的找零.
當收銀機中的錢不夠找零時返回字符串 "Insufficient Funds"
. 若是正好則返回字符串 "Closed"
.
否者, 返回應找回的零錢列表,且由大到小存在二維數組中.
數據轉換有點麻煩,整型和浮點型,字典與列表,解決的關鍵在於面額夠不夠找,找多少張的邏輯判斷,感受不是很完善,算法還能夠改進。
依照一個存着新進貨物的二維數組,更新存着現有庫存(在 arr1
中)的二維數組. 若是貨物已存在則更新數量 . 若是沒有對應貨物則把其加入到數組中,更新最新的數量. 返回當前的庫存數組,且按貨物名稱的字母順序排列.
updateInventory([[21, "Bowling Ball"], [2, "Dirty Sock"], [1, "Hair Pin"], [5, "Microphone"]], [[2, "Hair Pin"], [3, "Half-Eaten Apple"], [67, "Bowling Ball"], [7, "Toothpaste"]])
應該返回 [[88, "Bowling Ball"], [2, "Dirty Sock"], [3, "Hair Pin"], [3, "Half-Eaten Apple"], [5, "Microphone"], [7, "Toothpaste"]]
.
把一個字符串中的字符從新排列生成新的字符串,返回新生成的字符串裏沒有連續重複字符的字符串個數.連續重複只以單個字符爲準
例如, aab
應該返回 2 由於它總共有6中排列 (aab
, aab
, aba
, aba
, baa
, baa
), 可是隻有兩個 (aba
and aba
)沒有連續重複的字符 (在本例中是 a
).
permAlone("aaa")
應該返回 0.
permAlone("aabb")
應該返回 8.
本身想沒作出來,偷個巧python內置排列組合函數,嘻嘻
import itertools def permAlone(s): num = 0 for i in itertools.permutations(s, len(s)): for x in range(len(i) - 1): if i[x] == i[x + 1]: break else: num += 1 return num print(permAlone("aab")) # 應該返回 2. print(permAlone("aaa")) # 應該返回 0. print(permAlone("abc")) # 應該返回 6. print(permAlone("aabb")) # 應該返回 8. print(permAlone("abcdefa")) # 應該返回 3600. print(permAlone("abfdefa")) # 應該返回 2640. print(permAlone("zzzzzzzz")) # 應該返回 0.
讓日期區間更友好!
把常見的日期格式如:YYYY-MM-DD
轉換成一種更易讀的格式。
易讀格式應該是用月份名稱代替月份數字,用序數詞代替數字來表示天 (1st
代替 1
).
記住不要顯示那些能夠被推測出來的信息: 若是一個日期區間裏結束日期與開始日期相差小於一年,則結束日期就不用寫年份了。月份開始和結束日期若是在同一個月,則結束日期月份就不用寫了。
另外, 若是開始日期年份是當前年份,且結束日期與開始日期小於一年,則開始日期的年份也不用寫。
例如:
makeFriendlyDates(["2016-07-01", "2016-07-04"])
應該返回 ["July 1st, 2016","4th"]
makeFriendlyDates(["2016-07-01", "2018-07-04"])
應該返回 ["July 1st, 2016", "July 4th, 2018"]
.
makeFriendlyDates(["2016-12-01", "2017-02-03"])
should return ["December 1st, 2016","February 3rd"]
.
用下面給定的方法構造一個對象.
方法有 getFirstName(), getLastName(), getFullName(), setFirstName(first), setLastName(last), and setFullName(firstAndLast).
全部有參數的方法只接受一個字符串參數.
全部的方法只與實體對象交互.
python基礎的構造類、魔法初始化方法、實例方法
返回一個數組,其內容是把原數組中對應元素的平均海拔轉換成其對應的軌道週期.
原數組中會包含格式化的對象內容,像這樣 {name: 'name', avgAlt: avgAlt}
.
至於軌道週期怎麼求,戳這裏 on wikipedia (不想看英文的話能夠自行搜索以軌道高度計算軌道週期的公式).
求得的值應該是一個與其最接近的整數,軌道是以地球爲基準的.
地球半徑是 6367.4447 kilometers, 地球的GM值是 398600.4418, 圓周率爲Math.PI
orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]) 應該返回 [{name: "sputnik", orbitalPeriod: 86400}]. import math def orbitalPeriod(lst): r = 6367.4447 GM = 398600.4418 for dct in lst: avgAlt = 2 * math.pi * math.sqrt(((dct["avgAlt"] + r) ** 3) / GM) dct["orbitalPeriod"] = round(avgAlt) del dct["avgAlt"] return lst print(orbitalPeriod([{"name": "sputnik", "avgAlt": 35873.5553}])) print(orbitalPeriod( [{"name": "iss", "avgAlt": 413.6}, {"name": "hubble", "avgAlt": 556.7}, {"name": "moon", "avgAlt": 378632.553}]))
找到你的另外一半
都說優秀的程序員擅長面向對象編程,但卻常常找不到另外一半,這是爲何呢?由於你老是把本身侷限成爲一個程序員,沒有打開本身的思惟。
這是一個社羣的時代啊,在這裏你應該找到與你有相同價值觀但又互補的另外一半。
譬如:你編程能力強,估值11分,若是以20分爲最佳情侶來計算,你應該找一個設計能力強,估值爲9分的女生。
那麼當你遇到一個設計能力爲9分的女生,千萬別猶豫,大膽去表白。千萬別覺得後面的瓜比前面的甜哦。
舉個例子:有一個能力數組[7,9,11,13,15]
,按照最佳組合值爲20來計算,只有7+13和9+11兩種組合。而7在數組的索引爲0,13在數組的索引爲3,9在數組的索引爲1,11在數組的索引爲2。
因此咱們說函數:pairwise([7,9,11,13,15],20)
的返回值應該是0+3+1+2的和,即6。
咱們能夠經過表格來更直觀地查看數組中索引和值的關係:
Index | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
Value | 7 | 9 | 11 | 13 | 15 |
思路很重要,先寫出本身的處理邏輯,而後逐步分析邏輯中的數學方法,對應選擇容器和方法來作