從零學算法400

400.給你一個整數 n ,請你在無限的整數序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的數字。
示例 1:
輸入:n = 3
輸出:3
示例 2:
輸入:n = 11
輸出:0
解釋:第 11 位數字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是 0 ,它是 10 的一部分。

  • 最開始 n 對應的就是 n,但是當數字成為兩位數之后就開始對不上了,所以能想到這題的關鍵在于隨著數字位數的變化,如何找到 n 對應的結果,為了方便稱呼先定義幾個概念:
  • 位數(digit):這個數字有幾位,比如兩位數,三位數
  • 數位:比如數字 10,11,12 組成的序列 101112,其中每一位都是一個數位,其實也就是題目所說的序列上的某一位
  • 數字(num),比如 10,11,12 ,這三個數都是數字
  • 起始數字(start):某位數最小的數字,比如兩位數的范圍是 10~99,start 就是 10
  • 數位數量(count):只算 n 位數包含的數位數量,比如兩位數為 10~99 ,有 90 個 兩位數(每個數的數位數量為 2),所以位數數量為 90 * 2 = 180
  • 現在我們知道關鍵在于位數變化,所以研究位數變化帶來的一些規律
    請添加圖片描述
  • 位數遞推公式:觀察從一位數,兩位數,三位數的變化,所以 digit(i+1) = digit(i) + 1
  • 起始數字遞推公式:最小一位數為 1,最小兩位數為 10…所以 start(i+1) = start(i) * 10
  • 數位數量計算公式:n 位數范圍內的數位數量總和,比如一位數包含了 9 個 一位數,所以為 9*1;兩位數包含了 90 個 兩位數,所以為 90*2;三位數包含 900 個三位數所以為 900*3,所以規律其實就是 count = 9 * start * digit
  • 接下來我們第一步先確定 n 對應的數是幾位數,其實 n 對應的是數位數量,所以我們就讓 n 不斷減去 count,直到 n <= count,就能得到 n 對應幾位數。
  • 第二步我們確定一下他對應具體數字 num 為什么,將第一步計算完剩下的 n 整除 digit ,再加上起始值 start 就知道它對應哪個數,但是其實我們的推導過程都沒去管 0 這個數,它也算一個數位,所以實際上 num 應該是 start + (n-1)/digit;
  • 確定完了 num,同理還是用 n-1,讓它對 digit 取余我們就知道他在這個數的第幾位,所以把 num 轉為 string,num.charAt((n-1)%digit) 就是最終對應的字符,轉為數字即為最終結果
  •   public int findNthDigit(int n) {long start = 1;int digit = 1;long count = 9;// 第一步while(n > count){n -= count;start*=10;digit++;count = start * digit * 9;}// 第二步long num = start + (n-1)/digit;// 第三步return Long.toString(num).charAt((n-1)%digit) - '0';}
    
  • 這是從 0 開始處理版本,不忽略 0,start 在觀察一位數時為 0~9 的 0,之后才符合我們的遞推公式,那么 count 也是在為一位數時為 10,之后符合遞推公式,這樣之后就不用 n-1,直接用 n 即可
  •   public int findNthDigit(int n) {long start = 0;int digit = 1;long count = 10;while(n > count){n -= count;if(start==0)start=10;else start*=10;digit++;count = start * digit * 9;}long num = start + n/digit;return Long.toString(num).charAt(n%digit) - '0';}
    

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

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

相關文章

ubuntu22.04 arrch64版在線安裝mysql8

腳本 # todo參考鏈接 Ubuntu服務器配置mysql8_ubuntu安裝mysql8-CSDN博客

樂得瑞LDR6020 VR串流線方案:實現同時充電傳輸視頻信號

VR&#xff08;Virtual Reality&#xff09;&#xff0c;俗稱虛擬現實技術&#xff0c;是一項具有巨大潛力的技術創新&#xff0c;正在以驚人的速度改變我們的生活方式和體驗&#xff0c;利用專門設計的設備&#xff0c;如頭戴式顯示器&#xff08;VR頭盔&#xff09;、手柄、定…

三菱PLC定時中斷應用編程(計數器+比較器)

三菱PLC如何開啟定時中斷可以查看下面文章鏈接: PLC定時中斷程序應用注意事項(西門子三菱信捷)_plc設置斷點之后會怎樣_RXXW_Dor的博客-CSDN博客文章瀏覽閱讀2.5k次,點贊5次,收藏6次。首先我們了解下什么是中斷。中斷(打斷的意思),在PLC執行當前程序時,由于系統出現了…

抖音推廣實戰,教你如何快速成長

一、背景介紹 隨著移動互聯網的飛速發展&#xff0c;抖音作為一款短視頻平臺&#xff0c;已經成為越來越多人生活中的一部分。它不僅提供了豐富多彩的內容&#xff0c;還為商家提供了推廣產品的絕佳平臺。本文將為大家詳細解析抖音推廣實戰&#xff0c;幫助大家快速成長。 二…

基于SSM的老年公寓信息管理(有報告)。Javaee項目

演示視頻&#xff1a; 基于SSM的老年公寓信息管理&#xff08;有報告&#xff09;。Javaee項目 項目介紹&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三層體系結構&#xff0c;通過Spring SpringMvc …

Spring Boot 應用的 Docker 化:從 Maven 構建到 Docker 部署的完整指南

1. 使用Dockerfile部署 # 使用Java 8基礎鏡像 FROM java:8 LABEL authors"mabh"# 設置時區為Asia/Shanghai&#xff0c;可以根據需要更改 ENV TIME_ZONEAsia/Shanghai# 更新時區 RUN ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_…

堆的實現(C語言版)

文章目錄 概述堆的實現初始化銷毀插入刪除取堆頂元素求堆的長度判斷堆是否為空 完整代碼 概述 如果有一個關鍵碼的集合K {k0,k1,k2…kn-1}&#xff0c;把它的所有元素按完全二叉樹的順序存儲方式存儲在一個一維數組中&#xff0c;并滿足&#xff1a;Ki <K2*i1 且 Ki<K2…

Python Opencv實踐 - 全景圖片拼接stitcher

做一個全景圖片切片的程序Spliter 由于手里沒有切割好的全景圖片資源&#xff0c;因此首先寫了一個切片的程序spliter。 如果有現成的切割好的待拼接的切片文件&#xff0c;則不需要使用spliter。 對于全景圖片的拼接&#xff0c;需要注意一點&#xff0c;各個切片圖片之間要有…

NX二次開發UF_CSYS_map_point 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_map_point Defined in: uf_csys.h int UF_CSYS_map_point(int input_csys, double input_point [ 3 ] , int output_csys, double output_point [ 3 ] ) overview 概述 Ma…

Android11編譯第七彈:串口文件讀寫

問題&#xff1a;需要對SIM卡進行管理&#xff0c;支持APP切換SIM卡。此功能需要訪問串口文件&#xff0c;并且對串口文件進行讀寫。APP操作串口文件/dev/ttyUSB1時&#xff0c;串口文件打開失敗。 2023-11-23 10:59:44.092 14264-14264 MULTI_CARD_SerialHandle com.wellnkio…

三分鐘快速理解 ChatGPT 背后的大模型技術

在過去的十年中&#xff0c;人工智能領域取得了重大突破&#xff0c;其中自然語言處理&#xff08;NLP&#xff09;是其重要子領域之一。NLP使用的模型之一是大型語言模型&#xff08;LLMs&#xff09;。LLMs被設計用于處理大量文本數據&#xff0c;采用先進的神經網絡架構&…

nodejs 文件目錄監聽 chokidar watchpack

文件監聽實現&#xff0c;推薦使用chokidar&#xff1a; chokidar 默認是基于事件監聽文件 const chokidar require("chokidar"); const folderToWatch path.join(__dirname, "lib"); const watcher chokidar.watch(folderToWatch, { ignored: /(^|[…

在Vue中使用Echarts

文章目錄 Echarts1. 介紹2. 體驗NPM 安裝 Echarts定義 Echarts 容器引入 Echarts 3. 基礎配置 Echarts 1. 介紹 常見的數據可視化庫&#xff1a; D3.js 目前 Web 端評價最高的 Javascript 可視化工具庫(入手難)ECharts.js 百度出品的一個開源 Javascript 數據可視化庫Highch…

鼠標拖拽問題,不選中文本不觸發單擊事件

文章目錄 1. 為什么鼠標單擊的時候觸發了mousemove事件&#xff1f;明明鼠標沒有移動2. 鼠標拖拽元素怎么能不觸發單擊事件&#xff1f;怎么處理鼠標在元素內的相對定位&#xff0c;而不是每次定位到左上角&#xff1f;方式一&#xff1a;拖拽的元素沒有注冊click監聽就不會觸發…

10年測試老鳥,自動化測試經驗10條建議,一路狂飆...

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 1、哪一刻&#x…

Java面試題(每天10題)-------連載(37)

目錄 Mysql篇 1、Mysql如何優化DISTINCT&#xff1f; 2、如何輸入字符為十六進制數字&#xff1f; 3、如何顯示前50行&#xff1f; 4、可以使用多少列創建索引&#xff1f; 5、NOW()和CURRENT_DATE()有什么區別&#xff1f; 6、什么樣的對象可以使用CREATE語句創建&…

Postman如何使用(二):Postman Collection的創建/使用/導出分享等

一、什么是Postman Collection&#xff1f; Postman Collection是可讓您將各個請求分組在一起。 您可以將這些請求組織到文件夾中。中文經常將collection翻譯成收藏夾。如果再下文中看到這樣的翻譯不要覺得意外。Postman Collection會使你的工作效率更上一層樓。Postman Colle…

【洛谷 B2080】計算多項式的值 題解(順序結構+四則運算)

計算多項式的值 題目描述 假定多項式的形式為 x n x ( n ? 1 ) x^nx^{(n-1)} xnx(n?1) … x 2 x 1 x^2x1 x2x1&#xff0c;請計算給定單精度浮點數 x x x 和正整數 n n n 值的情況下這個多項式的值。多項式的值精確到小數點后兩位&#xff0c;保證最終結果在 doub…

NFS 速度變慢問題排查 性能優化

NFS 使用 RPC 來進行客戶端和服務器之間的通信。而在 RPC 的底層&#xff0c;NFS 使用 TCP 來進行數據的可靠傳輸&#xff0c;以便客戶端和服務器之間能夠有效地傳輸文件和進行遠程調用&#xff08;默認為TCP,也可調整為udp&#xff09; 1.首先服務器端啟動RPC服務portmap&…

教師工作就業前景

在這個知識爆炸的時代&#xff0c;當老師無疑是社會發展的重要基石。隨著科技的進步和社會的發展&#xff0c;教育行業的需求也在不斷增長。那么&#xff0c;教師工作的就業前景如何呢&#xff1f; 我們來看看教師工作的市場需求。隨著國家對教育的重視和投入的增加&#xff0c…