劍指offer44.數字序列中某一位的數字

最后一道題,我一定要自己做出來,想了不到一個小時想法差不多成熟了,但是有一個小細節出問題了,這個問題我在idea上debug都沒debug出來。我先講我的題解然后再講我這個小問題出在哪里吧。以下是我的代碼:

class Solution {public int findNthDigit(int n) {if(n<10)return n;int[][] area = new int[10][2];int start =0;int end = 9;for(int i =2;i<=9;i++){start=end+1;area[i][0]=start;end=(int)(end+9*Math.pow(10,i-1)*i);area[i][1]=end;}for(int i=1;i<=9;i++){if(n>=area[i][0] && n<=area[i][1]){int moreArea = n-area[i][0]+1;int moreDig = moreArea / i;int num =(int)(moreDig + Math.pow(10, i-1)-1);int more = moreArea % i;if(more == 0){return num % 10;}else{String numString = String.valueOf(num+1);char numChar = numString.charAt(more-1);return numChar - '0';}}}return -1;}
}

我創建一個area[10][2]的數組,area[i][0]表示i位數在序列中的起始序號,area[i][1]表示i位數在序列中的終止序號,比如area[2][0]=10,area[2][1]=190,表示兩位數在序列中的起始序號是10,終止序號是190,這里我是從兩位數開始的,因為一位數的話直接返回自己就好了,而這個起始和終止序號怎么算呢?

我們知道1位數有10個,分別是0-9;2位數有90個,分別是10-99;3位數有900個,分別是100-999;四位數有9000個,分別是1000-9999;…………我們可以發現i位數的個數就是9乘以10的i-1次方,這樣我們算序號就簡單多了,比如兩位數的起始序號就是1位數的終止序號加1,兩位數的終止序號就是1位數的終止序號9加上90*2;我們可以發現i位數的起始序號就是i-1位數的終止序號加1,i位數的終止序號就是i-1位數的終止序號+(i位數的個數*i),這樣一來就可以算出area數組,我這里最多只能算9位數的終止序號,因為n最大2的31次方,9位數的終止序號絕對夠了。

然后我們就拿n去循環中和area[i][0]和area[i][1],如果n在這中間,說明n是i位數。int moreArea = n-area[i][0]+1;這個moreArea可以算出n在i位數中的第幾位,int moreDig = moreArea / i;這個moreDig表示n是i位數中的第幾個數字(如果剛好除凈n就在第moreDig個i位數的末尾,如果有余數n出處在第moreDig+1個i位數中),int num =(int)(moreDig + Math.pow(10, i-1)-1),num就是n所在的數字(除凈的情況下是,否則是num+1)。int more = moreArea % i;看看是不是除凈了,有沒有余數,如果除凈了直接返回num%10也就是個位,如果沒除凈那么n就是num+1中的余數-1位,先把num+1變成string,然后取num+1的第余數-1個char,這個char-‘0’就可以獲得數字了。

我出問題的那個細節就是算end的時候我是用start+i位數的個數*i,這樣就導致所有的end全算錯了,除了2位數以外的start也全算錯了,因為兩位數的start是9+1得來的所以沒算錯,其他start是由上一個end得來的全錯了,因為算n是第幾位的時候減了start所以就錯了,但是兩個樣例分別是3和11,3是1位數我直接返回了,11是2位數我的2位數start沒錯,所以兩個樣例都過了,示例沒過。

好了,劍指offer全刷完了,接下來刷Hot100題。慢慢積累,慢慢成長吧,加油!

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

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

相關文章

PHP手術麻醉系統源碼,自動生成麻醉和護理醫療文書

一套手術麻醉系統源碼&#xff0c;可二次開發 手術室麻醉臨床信息系統&#xff08;AIMS&#xff09;是應用于醫院手術室、麻醉科室的計算機軟件系統。該系統針對整個圍術期&#xff0c;對病人進行全程跟蹤與信息管理&#xff0c;自動集成病人HIS、LIS、RIS、PACS信息&#xff0…

【SA8295P 源碼分析】76 - Thermal 功耗 之 /dev/thermalmgr 相關調試命令匯總

【SA8295P 源碼分析】76 - Thermal 功耗 之 /dev/thermalmgr 相關調試命令匯總 1、配置文件:/mnt/etc/system/config/thermal-engine.conf2、獲取當前SOC所有溫度傳感器的溫度:cat /dev/thermalmgr3、查看所有 Thermal 默認配置和自定義配置:echo query config > /dev/th…

【Spring源碼】小白速通解析Spring源碼,從0到1,持續更新!

Spring源碼 參考資料 https://www.bilibili.com/video/BV1Tz4y1a7FM https://www.bilibili.com/video/BV1iz4y1b75q bean工廠 DefaultListableBeanFactory&#xff08;最原始&#xff09; bean的生命周期 創建&#xff08;實例化&#xff09;–>依賴注入–>-初始化…

利用vue-router跳轉的幾種方式

?1 <router-link> 2 this.$router.push 跳轉到指定路徑&#xff0c;并將跳轉頁面壓入history棧中&#xff0c;也就是添加了一個頁面記錄。3 this.$router.replace 跳轉到指定路徑&#xff0c;將history棧中的當前頁面替換為跳轉到的頁面。4 this.$router.go(n) 在his…

數據生成 | MATLAB實現WGAN生成對抗網絡數據生成

數據生成 | MATLAB實現WGAN生成對抗網絡數據生成 目錄 數據生成 | MATLAB實現WGAN生成對抗網絡數據生成生成效果基本描述程序設計參考資料 生成效果 基本描述 1.WGAN生成對抗網絡&#xff0c;數據生成&#xff0c;樣本生成程序&#xff0c;MATLAB程序&#xff1b; 2.適用于MATL…

從public static void main(String[] args)看如何構造數據

java語言中public static void main(String[] args)里面的ages有什么作用&#xff1f; 在Java語言中&#xff0c;public static void main(String[] args) 是一個特殊的方法&#xff0c;它是Java程序的入口點。當你運行一個Java程序時&#xff0c;程序會從這個方法開始執行。這…

【游戲評測】河洛群俠傳一周目玩后感

總游戲時長接近100小時&#xff0c;剛好一個月。 這兩天費了點勁做了些成就&#xff0c;刷了等級&#xff0c;把最終決戰做了。 總體感覺還是不錯的。游戲是開放世界3D游戲&#xff0c;Unity引擎&#xff0c;瑕疵很多&#xff0c;但勝在劇情扎實&#xff0c;天賦系統、秘籍功法…

kubernetes(二)

文章目錄 1. kubernetes常用資源1.1 deployment資源1.2 deployment升級和回滾1.3 tomcat連接mysql1.4 wordpress 2. kubernetes的附加組件2.1 kubernetes集群配置dns服務2.2 kubernetes的dns配置文件2.3 namespace命名空間2.4 kubernetes健康檢查2.4.1 健康檢查livenessprobo2.…

代碼隨想錄二刷day01

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、704. 二分查找二、35. 搜索插入位置三、34. 在排序數組中查找元素的第一個和最后一個位置四、69. x 的平方根五、367. 有效的完全平方數六、27. 移除元素七…

JDBC Vertica Source Connector 使用文檔

支持以下引擎 Spark Flink SeaTunnel Zeta 關鍵特性 批處理 精確一次性處理 列投影 并行處理 支持用戶自定義拆分 支持查詢 SQL 并實現投影效果 描述 通過 JDBC 讀取外部數據源數據。 支持的數據源信息 DatasourceSupported versionsDriverUrlMavenVerticaDifferent depen…

40、端口號和套接字

經過了上節的學習之后&#xff0c;接下來我們再要了解的一個知識就是端口號和套接字。尤其端口號&#xff0c;是傳輸層中最為重要的基礎概念之一&#xff0c;我們在以后的學習中會經常提及到端口號。 端口號 曾經在學習TCP/IP模型的時候&#xff0c;我們曾學過“SAP”即服務訪…

設計HTML5表格

在網頁設計中&#xff0c;表格主要用于顯示包含行、列結構的二維數據&#xff0c;如財務表格、調查數據、日歷表、時刻表、節目表等。在大多數情況下&#xff0c;這類信息都由列標題或行標題及數據構成。本章將詳細介紹表格在網頁設計中的應用&#xff0c;包括設計符合標準化的…

【第七講---視覺里程計1】

視覺里程計就是通過對圖像進行特征提取與匹配得到兩幀之間的位姿&#xff0c;并進行估計相機運動。 經典SLAM中以相機位姿-路標來描述SLAM過程 特征提取與匹配 路標是三維空間中固定不變的點&#xff0c;可以在特定位姿下觀測到在視覺SLAM中&#xff0c;可利用圖像特征點作為…

2023 CCF BDCI 數字安全公開賽正式開啟報名

2023 CCF BDCI 數字安全公開賽重磅來襲&#xff01; 全新的賽道場景 豐厚的賽事獎勵 精彩的周邊活動 數字安全守護人的狂歡盛宴 快來報名參加吧 大賽背景 伴隨著數智化的持續加深&#xff0c;網絡安全、數據安全風險遍布于所有場景之中&#xff0c;包括工業生產、能源、交…

2019年9月全國計算機等級考試真題(C語言二級)

2019年9月全國計算機等級考試真題&#xff08;C語言二級&#xff09; 第1題 1、“商品”與“顧客”兩個實體集之間的聯系一般是 A. 一對一 B. 一對多 C. 多對一 D. 多對多 正確答案&#xff1a;D 第2題 定義學生選修課程的關系模式&#xff1a;SC&#xff08;S#&#xff0c…

tensorboard報錯:AttributeError: module ‘distutils‘ has no attribute ‘version‘

1、報錯問題 環境&#xff1a;pytorch 1.10 tensorboard報錯&#xff1a;AttributeError: module ‘distutils‘ has no attribute ‘version‘ 2、解決 pip uninstall setuptools pip install setuptools59.5.0

運營商三要素 API:構建安全高效的身份驗證系統

當今數字化的世界中&#xff0c;身份驗證是各行各業中至關重要的一環。為了保護用戶的隱私和數據安全&#xff0c;企業需要尋求一種既安全可靠又高效便捷的身份驗證方式。運營商三要素 API 應運而生&#xff0c;為構建安全高效的身份驗證系統提供了有力的解決方案。 運營商三要…

R語言 列表中嵌套列名一致的多個數據框如何整合為一個數據框

在批量建模后容易得到list&#xff0c;list中的每個元素都是單個的tibble 或者 dataframe&#xff0c;如何將這些數據整合為一張表呢&#xff1f; 載入R包 library(broom) library(tidyverse) 模擬數據 models <- txhousing %>% group_by(city) %>% do(modlm(lo…

-Webkit-Box 在 Safari 中出現的兼容性問題

一、問題背景&#xff1a; UI要求要實現這樣的效果&#xff0c;使用 display:-webket-box在chrome瀏覽器下完美解決 但是馬上啪啪打臉&#xff0c;在safari瀏覽器下顯示空白 &#xff0c;不能不說瀏覽器之間的兼容性簡直就是天坑 二、解決辦法 通過瀏覽器調試發現原本float的…

使用Pillow對圖像進行變換

使用Pillow對圖像進行變換 from PIL import Image, ImageEnhance# 原圖 image Image.open("1.jpg") image.show()# 鏡像 mirrored_image image.transpose(Image.FLIP_LEFT_RIGHT) mirrored_image.show() mirrored_image.save(mirror_image.jpg)# 旋轉 rotated_imag…