丑数
题目描述:把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。例如 6、8 都是丑数,但 14 不是,因为它包含质因子 7。 习惯上我们把 1 当做是第一个丑数。求按从小到大的顺序的第 N 个丑数。
分析:本题没有看懂,先记下。
丑数能够分解成 2^x3^y5^z,所以只需要把得到的丑数不断地乘以 2、3、5 之后并放入他们应该放置的位置即可,而此题的难点就在于如何有序的放在合适的位置。
1 乘以 (2、3、5)= 2、3、5;
2 乘以(2、3、5)= 4、6、10;
3 乘以(2、3、5)= 6、9、15;
5 乘以(2、3、5)= 10、15、25;
从这里我们可以看到如果不加策略地添加丑数是会有重复并且无序,而在 2x,3y,5z 中,如果 x=y=z 那么最小丑数一定是乘以 2 的,但关键是有可能存在 x > y > z 的情况,所以我们要维持三个指针来记录当前乘以2、乘以3、乘以5 的最小值,然后当其被选为新的最小值后,要把相应的指针 +1;因为这个指针会逐渐遍历整个数组,因此最终数组中的每一个值都会被乘以2、乘以3、乘以5,也就是实现了我们最开始的想法,只不过不是同时成乘以 2、3、5,而是在需要的时候乘以 2、3、5。
PS:与牛客相同!
代码: