刷题日记

今天是我人生中第一次刷题,前一阵跟着黑马刚学完了数据结构与算法中的排序算法,里面讲解了简单排序和高级排序。简单排序如冒泡排序、选择排序和插入排序,高级排序如希尔排序、归并排序以及快速排序。学完了一些基础知识,对排序算法有了大概了解,我就开始试试手,第一次做算法题还是觉得很难的,尽管做的是简单题,最近一段时间可能都会做排序题,集中做一类,感觉熟悉了就开始学下一个算法。

题目:统计各位数字之和为偶数的整数个数

给你一个正整数num,请你统计并返回小于或等于 num 且各位数字之和为偶数的正整数的数目。正整数的各位数字之和是其所有位上的对应数字相加的结果。

示例 1:

输入:num = 4
输出:2
解释:
只有 2 和 4 满足小于等于 4 且各位数字之和为偶数。    

示例 2:

输入:num = 30
输出:14
解释:
只有 14 个整数满足小于等于 30 且各位数字之和为偶数,分别是: 
2、4、6、8、11、13、15、17、19、20、22、24、26 和 28 。

这题我刚想的时候,思路是有点离谱的,我认为要想计算各个位数的和,那肯定是要把每一位都拿出来再相加,常用方式就是除10余10嘛,这很正常,然后我就想,那我该除几次余几次呢,是不是应该先知道有多少位,然后再往下做呢。这时我觉得好像有点问题,我先要整一个方法得到num有多少位,然后再整个方法得到num的每一个位的数,最后在相加,感觉有点麻烦呀,不像是算法题。后来我看了一眼题解,我就知道我想多了,不需要把每个位都单独拿出来。看见大佬们都写技巧方法,都是数学思想,这我也不懂呀,最后我选择暴力题解!

class Solution {
    public int countEven(int num) {
        //记录数量
        int count = 0;
        //先定义集合类型数组arr,用来存放所有小于num的数
        for(int i = 1;i <= num;i++){
            int x = i;
            int sum = 0;
            while (x != 0){
                sum = sum + x % 10;
                x = x / 10;
            }
            if(sum % 2 == 0){
                count++;
                System.out.print(i + " ");
            }
        }
        return count;
    }
}

所谓暴力解法,就是遍历<=num的所有数,判断是否满足要求。真实情况比我最开始想的要简单,不需要把每个数都拿出来,像代码里写的那样即可,一个while循环就完事儿。在while循环中进行余10除10的操作。

这是我第一道算法题,自此我就要踏上刷题之路了,一天刷一道两道,为了秋招做准备。

#你的秋招进展怎么样了##我的求职思考#
全部评论
这个;不打空格和){中间不打空格看得真是难受啊,其他的还是很漂亮的
1 回复 分享
发布于 2023-01-12 09:25 上海
这就是大佬嘛,tql
点赞 回复 分享
发布于 2023-01-07 15:27 安徽

相关推荐

评论
34
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务