标签:
题目:
Write a program to find the n
-th ugly number.
Ugly numbers are positive numbers whose prime factors only include 2, 3, 5
. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12
is the sequence of the first 10
ugly numbers.
Note that 1
is typically treated as an ugly number.
Hint:
isUgly
for every number until you reach the nth one. Most numbers are not ugly. Try to focus your effort on generating only the ugly ones.答案:
找出第n个丑陋数,排除依次判断是否为丑陋数的做法,根据题目的提示,可以以2,3,5为基准数,分为三个数列,每次从三个数列中取一个数字,选出最小的那个。
实现代码如下:
1 class Solution { 2 public: 3 int nthUglyNumber(int n) { 4 int arr[n]; 5 arr[0]=1; 6 int num2=2,num3=3,num5=5; 7 int count2=0,count3=0,count5=0; 8 for(int i=1;i<n;i++){ 9 arr[i]=getMin(num2,num3,num5); 10 if(arr[i]==num2){ 11 num2=2*arr[++count2]; 12 } 13 if(arr[i]==num3){ 14 num3=3*arr[++count3]; 15 } 16 if(arr[i]==num5){ 17 num5=5*arr[++count5]; 18 } 19 } 20 return arr[n-1]; 21 } 22 int getMin(int a,int b,int c){ 23 int minNum=(a<=b?a:b); 24 minNum=(minNum<=c?minNum:c); 25 return minNum; 26 } 27 };
注意:第11,14,17行的加号是在count前面的,先加再取数
标签:
原文地址:http://www.cnblogs.com/Reindeer/p/5727361.html