leetcode

Leetcode Solutions (0x6A73)
git clone https://git.pngu.org/leetcode
Log | Files | Refs | Submodules | README

commit ee0ac85c5339d9e99c00a01d6c612155c75651b2
parent b913661b53a8cb74715a2e87eafe17f7f9419d2c
Author: Jack Sangdahl <jack@pngu.org>
Date:   Mon, 16 Feb 2026 21:19:13 -0700

401. binary watch

Diffstat:
Mbinary_watch.c | 34+++++++++++++++++++---------------
Mbinary_watch.py | 12++++++------
2 files changed, 25 insertions(+), 21 deletions(-)

diff --git a/binary_watch.c b/binary_watch.c @@ -11,17 +11,16 @@ */ char **readBinaryWatch(int turnedOn, int *returnSize) { - char **ans = (char **)malloc(190 * sizeof(char *)); + char **ans = (char **)malloc(12 * 60 * sizeof(char *)); *returnSize = 0; - for (int h = 0; h < 12; h++) - for (int m = 0; m < 60; m++) { - int total = __builtin_popcount(h) + __builtin_popcount(m); - if (total == turnedOn) { - ans[*returnSize] = (char *)malloc(8 * sizeof(char)); - snprintf(ans[*returnSize], 8, "%d:%02d", h, m); - (*returnSize)++; - } + for (int i = 0; i < 1024; ++i) { + int h = i >> 6, m = i & 63; + if (h < 12 && m < 60 && __builtin_popcount(i) == turnedOn) { + char *tmp = (char *)malloc(6 * sizeof(char)); + sprintf(tmp, "%d:%02d", h, m); + ans[(*returnSize)++] = tmp; } + } return ans; } @@ -29,13 +28,18 @@ int main() { int rs1, rs2; char **rbw1 = readBinaryWatch(1, &rs1); char **rbw2 = readBinaryWatch(9, &rs2); - for (int i = 0; i < rs1; i++) - printf( - "%s ", - rbw1[i]); // expect: 0:01,0:02,0:04,0:08,0:16,0:32,1:00,2:00,4:00,8:00 + char *r1[] = {"0:01", "0:02", "0:04", "0:08", "0:16", + "0:32", "1:00", "2:00", "4:00", "8:00"}; + char *r2[] = {}; + for (int i = 0; i < rs1; i++) { + printf("%s ", rbw1[i]); + assert(!strcmp(r1[i], rbw1[i])); + } printf("\n"); - for (int i = 0; i < rs2; i++) - printf("%s ", rbw2[i]); // expect: null + for (int i = 0; i < rs2; i++) { + printf("%s ", rbw2[i]); + assert(!strcmp(r2[i], rbw2[i])); + } printf("\n"); for (int i = 0; i < rs1; i++) free(rbw1[i]); diff --git a/binary_watch.py b/binary_watch.py @@ -16,12 +16,12 @@ class Solution(object): :type turnedOn: int :rtype: List[str] """ - return [ - "%d:%02d" % (h, m) - for h in range(12) - for m in range(60) - if (bin(h) + bin(m)).count("1") == turnedOn - ] + ans = list() + for i in range(1024): + h, m = i >> 6, i & 0x3F + if h < 12 and m < 60 and bin(i).count("1") == turnedOn: + ans.append(f"{h}:{m:02d}") + return ans if __name__ == "__main__":