CSDN话题挑战赛第2期
参赛话题:学习笔记
题目链接:面试题 17.09. 第 k 个数
题目描述:
有些数的素因子只有 3,5,7,请设计一个算法找出第 k 个数。注意,不是必须有这些素因子,而是必须不包含其他的素因子。例如,前几个数按顺序应该是 1,3,5,7,9,15,21。
示例 1:
输入: k = 5
输出: 9
解题思路:
第一个数是1,所以如果输入k为1,直接返回1
创建一个长度为k的整型数组array,存放数据
一个数的素因子只有3,5,7(还包含1和本身),那么这个数必定是3,5,7的整数倍
观察到[1,3,5,7,9,15,21,25,27....] 每个数都是数组已经存在的数乘于3,5,7
定义a,b,c变量,代表数组下标
定义变量min
每次min取数组中存在的数乘于3,5,7的最小值,赋值给array
若min由3相乘得到,则a++;5相乘得到,b++;7相乘得到,c++
最后返回array[k-1]
解题代码:
class Solution {
public int getKthMagicNumber(int k) {
// 是1直接返回
if(k == 1) return 1;
int[] array = new int[k];
// 定义4个变量,代表array的下标
int a = 0 ,b = 0,c = 0,tem = 1;
array[0] = 1;
while(tem < k){
// 素数相乘依旧是素数,每次取最小
int min = Math.min(Math.min(array[a] * 3,array[b] * 5),array[c] * 7);
// 确定获得的数,对应下标++
if(min == array[a] * 3) a++;
if(min == array[b] * 5) b++;
if(min == array[c] * 7) c++;
array[tem++] = min;
}
return array[k-1];
}
}