日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《剑指offer》第四十九题(丑数)

發布時間:2025/6/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《剑指offer》第四十九题(丑数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 面試題49:丑數 // 題目:我們把只包含因子2、3和5的數稱作丑數(Ugly Number)。求按從小到 // 大的順序的第1500個丑數。例如6、8都是丑數,但14不是,因為它包含因子7。 // 習慣上我們把1當做第一個丑數。 #include <iostream>// ====================算法1的代碼==================== //不用額外的內存,直接計算 bool IsUgly(int number)//判斷是不是丑數 {while (number % 2 == 0)number /= 2;while (number % 3 == 0)number /= 3;while (number % 5 == 0)number /= 5;return (number == 1) ? true : false; }int GetUglyNumber_Solution1(int index) {if (index <= 0)return 0;int number = 0;int uglyFound = 0;while (uglyFound < index)//從頭到尾開始計算 {++number;if (IsUgly(number))++uglyFound;}return number; }// ====================算法2的代碼==================== //使用內存,只計算丑數,節省時間 int Min(int number1, int number2, int number3);int GetUglyNumber_Solution2(int index) {if (index <= 0)return 0;int *pUglyNumbers = new int[index];pUglyNumbers[0] = 1;int nextUglyIndex = 1;int *pMultiply2 = pUglyNumbers;//用來存儲前面丑數的二倍值中,剛好大于當前最大丑數的數值int *pMultiply3 = pUglyNumbers;//三倍int *pMultiply5 = pUglyNumbers;//五倍while (nextUglyIndex < index){int min = Min(*pMultiply2 * 2, *pMultiply3 * 3, *pMultiply5 * 5);//將這三個值中最小值作為下一個丑數存儲pUglyNumbers[nextUglyIndex] = min;while (*pMultiply2 * 2 <= pUglyNumbers[nextUglyIndex])//更新這三個值++pMultiply2;while (*pMultiply3 * 3 <= pUglyNumbers[nextUglyIndex])++pMultiply3;while (*pMultiply5 * 5 <= pUglyNumbers[nextUglyIndex])++pMultiply5;++nextUglyIndex;}int ugly = pUglyNumbers[nextUglyIndex - 1];delete[] pUglyNumbers;return ugly; }int Min(int number1, int number2, int number3) {int min = (number1 < number2) ? number1 : number2;min = (min < number3) ? min : number3;return min; }// ====================測試代碼==================== void Test(int index, int expected) {if (GetUglyNumber_Solution1(index) == expected)printf("solution1 passed\n");elseprintf("solution1 failed\n");if (GetUglyNumber_Solution2(index) == expected)printf("solution2 passed\n");elseprintf("solution2 failed\n"); }int main(int argc, char* argv[]) {Test(1, 1);Test(2, 2);Test(3, 3);Test(4, 4);Test(5, 5);Test(6, 6);Test(7, 8);Test(8, 9);Test(9, 10);Test(10, 12);Test(11, 15);Test(1500, 859963392);Test(0, 0);system("pause");return 0; }

?

轉載于:https://www.cnblogs.com/CJT-blog/p/10526308.html

總結

以上是生活随笔為你收集整理的《剑指offer》第四十九题(丑数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。