leetcode刷刷题(50) ---- 统计位数为偶数的数字(C语言版)

2020-6-10

  • "Those whom God wishes to destroy, he first makes mad."
    ------ Euripides
    “神欲使之灭亡,必先使 之疯狂。”
    – 希腊悲剧作家 – 欧底庇德斯

题目

  • leetcode – 1295. 统计位数为偶数的数字
给你一个整数数组 nums,请你返回其中位数为 偶数 的数字的个数。

示例 1:
输入:nums = [12,345,2,6,7896]
输出:2
解释:
12 是 2 位数字(位数为偶数) 
345 是 3 位数字(位数为奇数)  
2 是 1 位数字(位数为奇数) 
6 是 1 位数字 位数为奇数) 
7896 是 4 位数字(位数为偶数)  
因此只有 12 和 7896 是位数为偶数的数字

示例 2:
输入:nums = [555,901,482,1771]
输出:1 
解释: 
只有 1771 是位数为偶数的数字。

提示:
1 <= nums.length <= 500
1 <= nums[i] <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-numbers-with-even-number-of-digits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

个人解答:(C版本)

  • 方法一:普通的解法,逐个数判断。
	int findNumbers(int* nums, int numsSize){
	    if(nums == NULL || numsSize<=0)
	        return 0;
	    int event_count = 0;
	    for(int i; i<numsSize; ++i)
	    {
	        int k = nums[i];
	        int event_num = 0;
	        while(k)
	        {
	            k /=10;
	            ++event_num;
	        }
	
	        if(event_num%2 == 0)
	            ++event_count;
	    }
	
	    return event_count;
	}
  • 复杂度分析
    1)时间复杂度:O(N^2)。
    2)空间复杂度:O(1)。
  • 运行结果:
    在这里插入图片描述
#incluide "math.h"
int findNumbers(int* nums, int numsSize){
    if (nums == NULL || numsSize<=0)
        return 0;
    int event_count = 0;
    for (int i; i<numsSize; ++i)
    {
        if (((int)log10(nums[i])+1) % 2 == 0)
            ++event_count;
    }

    return event_count;
}
他山之石:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章