刷题日记
今天是我人生中第一次刷题,前一阵跟着黑马刚学完了数据结构与算法中的排序算法,里面讲解了简单排序和高级排序。简单排序如冒泡排序、选择排序和插入排序,高级排序如希尔排序、归并排序以及快速排序。学完了一些基础知识,对排序算法有了大概了解,我就开始试试手,第一次做算法题还是觉得很难的,尽管做的是简单题,最近一段时间可能都会做排序题,集中做一类,感觉熟悉了就开始学下一个算法。
题目:统计各位数字之和为偶数的整数个数
给你一个正整数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的操作。
这是我第一道算法题,自此我就要踏上刷题之路了,一天刷一道两道,为了秋招做准备。
#你的秋招进展怎么样了##我的求职思考#