1.第k个数(丑数)

剑指offer里有此题,但是其认为1为第一个丑数。

牛客网上此题认为1不为丑数,但是如果要正确计算的话,那么必须设置第一个丑数为1,那么求第k个数就转化为求第k+1个数

class KthNumber {
public:
    int findKth(int k) {
        // write code here
        
        if(k<=0) 
            return 0;
        else if(1==k)
            return 3;
        else if(2==k)
            return 5;
        else if(3==k)
            return 7;
        else if(k>100)
            return 0;
        
        int index=1,min,res;
        int *num=new int[k+1];
        num[0]=1;
        
        int *multi3=num,*multi5=num,*multi7=num;
        while(index<k+1){
            min=minval(*multi3*3,*multi5*5,*multi7*7);
            num[index]=min;
            
            while(*multi3*3<=min)
                ++multi3;
            while(*multi5*5<=min)
                ++multi5;
            while(*multi7*7<=min)
                ++multi7;
            ++index;
        }
        
        res=num[index-1];
        delete[] num;
        num=NULL;
        return res;
    }
    
private:
    int minval(const int& num1,const int& num2,const int& num3){
        int min=num1<num2?num1:num2;
        return min<num3?min:num3;
    }
};
View Code

相关文章: