把只包含因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。
//找到第n個醜數
//方法1:存放num之前所有元素是否是醜數的flag
int getuglynumber_solution(int index)
if(index == 1)
vectorugly_flag;
bool ugly = false;
int num = 1;
int count = 1;
ugly_flag.push_back(false);
ugly_flag.push_back(true);
while(count != index)
else if(num%3 == 0)
else if(num%5 == 0)
else
ugly_flag.push_back(ugly);
if(ugly)
}return num;
}//方法2:遞迴
bool buglynumber(int num)
if(num%2 == 0)
else if(num%3 == 0)
else if(num%5 == 0)
else
}int getuglynumber_solution_2(int index)
int num = 0;
int count = 0;
while(count != index)
}return num;
}//方法3:既省空間又省時間的方法
//醜數陣列公升序排列,且最後乙個數為m
//找到第乙個*2之後大於m醜數m2及其位置t2
//找到第乙個*3之後大於m醜數m3及其位置t3
//找到第乙個*5之後大於m醜數m5及其位置t5
//取min(m2,m3,m5)為下乙個醜數
//得到醜數字置的索引+1。比如m2為最小值,那麼t2++。
int getuglynumber_solution_3(int index)
int num = 1;
int count = 1;
vectorugly;
int t2=0;
int t3=0;
int t5=0;
ugly.push_back(1);
while(count != index)
while(ugly[t3]*3 <= num)
while(ugly[t5]*5 <= num)
}return num;
}
83 找到第n個醜數
2,3,5 6 是醜數 14 不是醜數,包含7 下乙個醜數必定是陣列的某乙個醜數a 2 b 3 c 5 中最小的值 m2,之前的醜數 2都小於當前最大的醜數 之後的醜數 2都大於當前最大的醜數 m3 m5 def getuglynumber index if index 1 return 0 res...
找到第1500個醜數
把只包含質因子2 3和5的數稱作醜數。例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。暴力的一點的方法,可以從1開始遍歷,依次判斷是否是醜數,如果是醜數,計數器 1,當計數器加到1500的時候,這個數字就是醜數了.void v...
返回第n個醜數
把只包含質因子2 3和5的數稱作醜數 ugly number 例如 2,3,4,5,6,8,9,10,12,15,等,習慣上我們把1當做是第乙個醜數。寫乙個高效演算法,返回第n個醜數。解法1 判斷某個數是否為醜數,連續找到第n個醜數 include using namespace std bool ...