题目:传入一个参数n,表示有多少个灯亮,然后判断有多少种时间,
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
//这个函数主要是计算传入的参数num有多少个1
int cal_num(int num)
{
int temp = 0;
int i;
for(i = 0; i < 6; i++)
{
if(num & 0x0f)
{
temp++;
}
num = num >> 1;
}
return temp;
}
//计算出有多少种时间
char **readBinaryWatch(int num, int *returnSize)
{
char **rec = NULL;
int minute, hourse;
int m_num = 0, h_num = 0;
*returnSize = 0;
for(minute = 0; minute < 60; minute++)
{
m_num = cal_num(minute);
for(hourse = 0; hourse < 12; hourse++)
{
h_num = cal_num(hourse);
if(h_num + m_num == num)
{
rec = rec ? (char**)realloc(rec, sizeof(char *) * (1 + *returnSize)) : (char **)malloc(sizeof(char*));
rec[*returnSize] = (char *)malloc(6 * sizeof(char));
sprintf(rec[*returnSize], "%d:%02d", hourse, minute);
(*returnSize)++;
}
}
}
return rec;
}
这题中主要是要了解二维数组的构成
还有回溯法的应用