C++面試題(35)-------找出第 n 個丑數(Ugly Number)

  • 操作系統:ubuntu22.04
  • IDE:Visual Studio Code
  • 編程語言:C++11

題目描述

我們把只包含質因子 2、3 和 5 的數稱作丑數(Ugly Number)。例如 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個丑數。
請編寫一個函數,找出第 n 個丑數。

示例:

輸入: n = 10
輸出: 12
解釋: 第10個丑數是12

解法思路:動態規劃 + 三指針

這是一道典型的動態規劃問題,也可以用最小堆來解,但最優解是使用 三指針法,時間復雜度為 O(n),空間復雜度為 O(n)。
思路詳解:

我們要構造一個丑數數組 dp[],其中 dp[i] 表示第 i 個丑數。

每個新的丑數只能由之前的丑數乘以 2、3 或 5 得到。

我們維護三個指針:

  • i2:指向下一個將乘以 2 的位置;
  • i3:指向下一個將乘以 3 的位置;
  • i5:指向下一個將乘以 5 的位置;

每次取這三個候選值中的最小值作為下一個丑數,并移動對應指針

代碼實現


#include <vector>using namespace std;class Solution {
public:int nthUglyNumber( int n ){vector< int > dp( n );dp[ 0 ] = 1;  // 第一個丑數是1int i2 = 0, i3 = 0, i5 = 0;for ( int i = 1; i < n; ++i ){int next2 = dp[ i2 ] * 2;int next3 = dp[ i3 ] * 3;int next5 = dp[ i5 ] * 5;int nextUgly = min( next2, min( next3, next5 ) );dp[ i ]      = nextUgly;if ( nextUgly == next2 )i2++;if ( nextUgly == next3 )i3++;if ( nextUgly == next5 )i5++;}return dp[ n - 1 ];}
};#include <iostream>int main()
{Solution sol;cout <<"第10個丑數:"<< sol.nthUglyNumber( 10 ) << endl;  // 輸出 12cout <<"第1個丑數:"<< sol.nthUglyNumber( 1 ) << endl;   // 輸出 1cout << "第15個丑數:"<<sol.nthUglyNumber( 15 ) << endl;  // 輸出 24return 0;
}

運行結果

第10個丑數:12
第1個丑數:1
第15個丑數:24

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85703.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day03_數據結構(手寫)

01.數據結構畫圖 02. //11.按值查找返回位置 int search_value(node_p H,int value) { if(HNULL){ printf("入參為空.\n"); return -1; …

【Java學習筆記】Collections工具類

Collections 工具類 基本介紹 &#xff08;1&#xff09;Collections 中提供了一系列靜態方法對集合元素進行排序&#xff0c;查詢和修改等操作 &#xff08;2&#xff09;操作對象&#xff1a;集合 常用方法一覽表 方法描述reverse(List<?> list)反轉 List 中元素…

spring-webmvc @ResponseBody 典型用法

典型用法 基本用法&#xff1a;返回 JSON 數據 GetMapping("/users/{id}") ResponseBody public User getUser(PathVariable Long id) {return userService.findById(id); }Spring 自動使用 Jackson&#xff08;或其他 HttpMessageConverter&#xff09;將 User 對…

AI-調查研究-08-跑步分析研究 潛在傷害與預防 不同年齡段與性別的情況

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持續更新中&#xff01;&#xff08;長期更新&#xff09; 目前2025年06月16日更新到&#xff1a; AI煉丹日志-29 - 字節…

AI任務相關解決方案9-深度學習在工業質檢中的應用:基于DeepLabv3+模型的NEU-seg數據集語義分割研究

大家好我是微學AI,今天給大家介紹一下AI任務相關解決方案9-深度學習在工業質檢中的應用:基于DeepLabv3+模型的NEU-seg數據集語義分割研究。DeepLabv3+模型在NEU-seg數據集上實現了高達87.65%的平均交并比(mIoU),為金屬表面缺陷的高精度檢測提供了有力工具。本文將詳細探討Dee…

mysql JSON_EXTRACT JSON_UNQUOTE 函數

在處理mysql 有存儲的json字段&#xff0c;需要提取時候發現JSON_EXTRACT函數&#xff0c;發現此函數提取后會帶有引號&#xff0c;組合使用JSON_UNQUOTE 可去掉引號&#xff01; JSON_EXTRACT 函數概述 JSON_EXTRACT是MySQL中用于從JSON文檔中提取數據的函數&#xff0c;語法…

Prompt:更好的提示與迭代

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀和評論&#x1f604;。 目錄 1 引言1.1 引用資料 2 更好的提示2.1 情景學習IC…

SQL85 統計每個產品的銷售情況

SQL85 統計每個產品的銷售情況 好復雜&#xff0c;俺不中了。。 問題描述 本查詢旨在分析2023年各產品的銷售情況&#xff0c;包括&#xff1a; 每個產品的總銷售額、單價、總銷量和月均銷售額每個產品銷量最高的月份及其銷量每個產品購買量最高的客戶年齡段 解題思路 1. 基…

Django MAC Pycharm 命令行建立項目,注冊app運行失敗,找不到views導入包

相對復雜的情況 你沒有直接在Pycharm中建立一個Django項目&#xff0c;而是直接建立某個項目或者打開某個項目&#xff0c;使用命令后安裝Django后&#xff0c;使用命令后建立了Django項目&#xff0c;盡管你的目錄盡可能干凈&#xff0c;只有Django項目&#xff0c;但是這仍然…

窄帶和寬帶誰略誰優

窄帶&#xff08;Narrowband&#xff09;與寬帶&#xff08;Broadband&#xff09;深度對比 ——涵蓋 優缺點、適用場景、調制方式 1. 窄帶&#xff08;Narrowband&#xff09; 1.1 核心特點 帶寬&#xff1a;≤25 kHz&#xff08;典型值&#xff0c;如NB-IoT僅占用180kHz&a…

李佳琦直播間618收官:6成銷量為國貨,多品類增超25%

618大促迎來收官&#xff0c;作為電商消費的關鍵風向標&#xff0c;李佳琦直播間生動呈現了當下消費市場的多元趨勢。 據「TMT星球」了解&#xff0c;在長達近40天的大促里&#xff0c;李佳琦直播間不僅延續過往的高人氣與強帶貨力&#xff0c;更在高質價比產品、高質量服務保…

c++ noexcept關鍵字

noexcept 是 C11 中引入的一個關鍵字&#xff0c;用來標記函數聲明&#xff0c;表示該函數不會拋出異常。它可以用于函數、函數指針、Lambda 表達式等。使用 noexcept 可以幫助編譯器進行優化&#xff0c;提高代碼的執行效率&#xff0c;并且讓程序在處理異常時更加明確。 1. …

騰訊混元3D制作簡單模型教程-2

以下是騰訊混元3D制作簡單模型的詳細教程&#xff0c;整合最新版本特性&#xff08;截至2025年6月&#xff09;&#xff0c;操作門檻低且無需專業基礎&#xff1a; &#x1f5a5; 一、在線生成&#xff08;最快30秒完成&#xff09; ?訪問平臺? 打開 騰訊混元3D創作引擎官網…

阿里云申請ssl證書,同時需要綁定域名,下載nginx壓縮包,nginx添加證書路徑即可

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 一、ssl是什么&#xff1f;二、登錄阿里云三、圖片教程四、添加域名前綴&#xff08;www&#xff09;如&#xff1a;www.baidu.com總結 一、ssl是什么&#xff1f; …

額度互動促進金融健康,螞蟻消金創新智能實時交互式風控系統

“螞蟻消金希望利用交互式智能風控技術&#xff0c;挖掘年輕人努力成長的證明”。6月19日&#xff0c;在上海舉行的2025中國國際金融展上&#xff0c;螞蟻消金首席風險官林嘉南分享了&#xff0c;如何將大模型技術應用在交互式智能風控領域&#xff0c;從而促進額度的互動性&am…

SAP-ABAP:LOOP ... ASSIGNING高效處理內表數據詳解

在ABAP中&#xff0c;LOOP ... ASSIGNING 是高效處理內表數據的關鍵技術&#xff0c;它通過字段符號(field symbol) 直接訪問內表內存地址&#xff0c;避免數據副本創建。以下是詳細用法指南&#xff1a; 一、基礎語法結構 FIELD-SYMBOLS: <fs_line> TYPE any. " …

Tomcat本地部署Maven Java Web項目

接下來是在widows部署maven javaweb 首先要配置tomcat&#xff0c;我這里是聯合項目&#xff0c;需要配置多個tomcat 選擇每個對應的war包 這里的項目名和端口號要改&#xff0c;否則多個項目啟動會因為端口號占用無法啟動 Tomcat運行項目 打包 在右邊的Maven視圖里面找到…

golang--具名返回值、匿名返回值與 defer 語句之間的關系,以及 panic 對它們的影響

好的&#xff0c;我們來詳細探討 Go 語言中具名返回值、匿名返回值與 defer 語句之間的關系&#xff0c;以及 panic 對它們的影響。這是 Go 錯誤處理和資源管理中的核心機制。 核心概念 具名返回值 (Named Return Values): 在函數簽名中聲明返回變量名。例如&#xff1a;fun…

FFmpeg 超級詳細安裝與配置教程(Windows 系統)

1. 前言 FFmpeg 是一個用于處理視頻、音頻等多媒體文件的開源工具包。它支持幾乎所有的多媒體格式轉換、剪輯和編輯&#xff0c;是開發者和多媒體工作者必備的工具。本文詳細講解如何在 Windows 系統上安裝 FFmpeg 并進行基本配置。 2. 下載 FFmpeg 安裝包 打開 Download FFmp…

Pytorch中gather()函數詳解和實戰示例

在 PyTorch 中&#xff0c;torch.gather() 是一個非常實用的張量操作函數&#xff0c;主要用于根據索引從輸入張量中選擇特定位置的值。它常用于注意力機制、序列處理等場景。 函數定義 torch.gather(input, dim, index) → Tensorinput&#xff1a;待提取數據的張量。dim&…