1. 程式人生 > 其它 >LeetCode——401. 二進位制手錶(Java)

LeetCode——401. 二進位制手錶(Java)

題目描述

題幹:
給你一個整數 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)

如果文章存在問題或者有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見