LeetCode——401. 二進位制手錶(Java)
阿新 • • 發佈:2021-06-21
題目描述
題幹:
給你一個整數 turnedOn ,表示當前亮著的 LED 的數量,返回二進位制手錶可以表示的所有可能時間。
你可以 按任意順序 返回答案。
小時不會以零開頭:
例如,"01:00" 是無效的時間,正確的寫法應該是 "1:00" 。
分鐘必須由兩位陣列成,可能會以零開頭:
例如,"10:2" 是無效的時間,正確的寫法應該是 "10:02" 。
示例1:
輸入:turnedOn = 1
輸出:["0:01","0:02","0:04","0:08","0:16","0:32","1:00","2:00","4:00","8:00"]
示例2:
輸入:turnedOn = 9
輸出:[]
題解思路
這裡返回所有可能的時間,因為只有10位二進位制數字來表示時間 只要滿足得到二進位制1的數量為給定的的值,就可以返回 唯一要注意的就是,小時和分鐘不要超過12和60即可,這也代表這類表只能採用12小時制
正確程式碼
public List<String> readBinaryWatch(int turnedOn) { List<String> list = new ArrayList<>(); for (int h = 0; h < 12; ++h) { for (int m = 0; m < 60; ++m) { if (Integer.bitCount(h) + Integer.bitCount(m) == turnedOn) { list.add(h + ":" + (m < 10 ? "0" : "") + m); } } } return list; }
總結
這裡無論是像程式碼這樣分開記錄小時和分鐘,還是連續10位二進位制,前4位是小時,後六位代表分鐘
值得抬槓的是,這裡官方居然說是列舉,複雜度為O(1),有一說一,感覺還是像O(n^2)
如果文章存在問題或者有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見