▶循序漸進 實作報數機_Lexicographical Numbers_Leetcode #386

閱讀時間約 1 分鐘

題目敘述 386. Lexicographical Numbers


給定一個數字n,請實作一個字典序(Lexical order)排列的報數機,
字典序輸出所有1~n的數字。


你必須實現一個O(n) time線性時間,O(1) extra space常數額外空間的演算法。


測試範例

Example 1:

Input: n = 13
Output: [1,10,11,12,13,2,3,4,5,6,7,8,9]

Example 2:

Input: n = 2
Output: [1,2]

約束條件

Constraints:

  • 1 <= n <= 5 * 10^4

n值介於 1 ~ 五萬 之間。


演算法 根據字典序生成1~n數列


currentNum 從1開始出發

每回合迭代的時候,

測試當下的currentNum能不能擴張10倍,而且不超過n

如果可以,就擴張10倍,依照字典序生成相關的數字。

如果不行,則縮減到原有的合法範圍內,每次累加1,生成由小到大遞增的數字


Python 程式碼

class Solution:
def lexicalOrder(self, n: int) -> List[int]:

result = []
cur = 1

for _ in range(n):

result.append( cur )

if cur * 10 <= n:
# Keep growing, start with 1...
cur = cur * 10
else:
# Keep shrinking if current number's last digit is 9, or current number is too big
while (cur % 10 == 9) or (cur >= n ):
cur = cur // 10

# Go to next number
cur = cur + 1

return result

Golang 程式碼

func lexicalOrder(n int) []int {

result := []int{}
currentNum := 1

for i := 0 ; i < n ; i++{

result = append(result, currentNum)

if currentNum * 10 <= n{
// Keep growing, start with 1...
currentNum = currentNum * 10
}else{
// Keep shrinking if current number's last digit is 9, or current number is too big
for (currentNum % 10 == 9) || (currentNum >= n ){
currentNum = currentNum / 10
}
// Go to next number
currentNum = currentNum + 1
}

}
return result
}

複雜度分析

時間複雜度: O(n)

依照字典序生成1~n的所有數字,每個數字只會生成一次。

空間複雜度: O(1)

除了題目輸出指定的result陣列以外,
其他用到的都是固定尺寸的臨時變數,所需額外空間為O(1)


Reference

[1] Lexicographical Numbers - LeetCode

84會員
422內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
884. Uncommon Words from Two Sentences 給定兩個字串s1 和 s2,請找出uncommon words,以陣列的形式返回答案。 uncommon word的定義: 某個單字只在s1出現一次,沒有出現在s2;或者 某個單字只在s2出現一次,沒有出現在s1。
539. Minimum Time Difference 給定一個輸入陣列timePoints,每個陣列元素都是一個24小時制的時間。 請問最小的時間差距是多少? 註: 請以分鐘為單位回答。
1371. Find the Longest Substring Containing Vowels in Even Counts 給定一個字串s,請找出母音字母出現皆為偶數次的最長子字串的長度。 例如"paaoooq",母音字母出現皆為偶數次的最長子字串paaoo,長度為5。
2419. Longest Subarray With Maximum Bitwise AND 給定一個輸入陣列nums,請找出擁有最大bitwise AND值的子陣列長度是多少?
Count the Number of Consistent Strings 給定一個字庫allowed,和一個字串陣列words,請計算有幾個word是一致的? 一致的定義是: word內所有的英文字母都可以在allowed內找到。
Minimum Bit Flips to Convert Number 給定兩個整數start 和 goal,請問最少需要幾次bit翻轉,使得start等於goal? 註: bit翻轉的定義就是0->1 或者1->0
884. Uncommon Words from Two Sentences 給定兩個字串s1 和 s2,請找出uncommon words,以陣列的形式返回答案。 uncommon word的定義: 某個單字只在s1出現一次,沒有出現在s2;或者 某個單字只在s2出現一次,沒有出現在s1。
539. Minimum Time Difference 給定一個輸入陣列timePoints,每個陣列元素都是一個24小時制的時間。 請問最小的時間差距是多少? 註: 請以分鐘為單位回答。
1371. Find the Longest Substring Containing Vowels in Even Counts 給定一個字串s,請找出母音字母出現皆為偶數次的最長子字串的長度。 例如"paaoooq",母音字母出現皆為偶數次的最長子字串paaoo,長度為5。
2419. Longest Subarray With Maximum Bitwise AND 給定一個輸入陣列nums,請找出擁有最大bitwise AND值的子陣列長度是多少?
Count the Number of Consistent Strings 給定一個字庫allowed,和一個字串陣列words,請計算有幾個word是一致的? 一致的定義是: word內所有的英文字母都可以在allowed內找到。
Minimum Bit Flips to Convert Number 給定兩個整數start 和 goal,請問最少需要幾次bit翻轉,使得start等於goal? 註: bit翻轉的定義就是0->1 或者1->0
你可能也想看
Google News 追蹤
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
題目敘述: Reverse Bits 給定一個32bit的整數,請逆序翻轉其二進位表達式,輸出翻轉過後的數字。 例如輸入是二進位1010111 逆序翻轉後是 1110101,對應的十進位數值是117 測試範例 Example 1: Input: n = 00000010100101000
Thumbnail
題目敘述 Sort Array by Increasing Frequency Leetcode #1636 給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素。 如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。 測試範例 Example 1: Input: nums
Thumbnail
題目敘述 Patching Array 題目給定一個整數陣列, 請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數。
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
給定一個輸入陣列,計算最長遞增子序列的總數。本題和Longest Common Subsequence相似,需要設定一個計數器,記錄最長遞增子序列的數量。透過DP模型的化簡方式來解決問題。時間複雜度為O(n^2),空間複雜度為O(n)。主要使用回頭看的技巧,找出比較小的元素去延伸遞增子序列的長度。
Thumbnail
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
Thumbnail
Append Characters to String to Make Subsequence 給定兩個字串s和字串t。 請計算最少的字元串接數量是多少,串接在s的尾端,使得t是s的子序列。 測試範例 Example 1: Input: s = "coaching", t =
Thumbnail
題目敘述 題目會給定一個整數陣列arr,要求我們判斷是否每個元素的出現次數都不同? 題目的原文敘述 測試範例 Example 1: Input: arr = [1,2,2,1,1,3] Output: true Explanation: The value 1 has 3 occurre
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
Thumbnail
題目敘述: Reverse Bits 給定一個32bit的整數,請逆序翻轉其二進位表達式,輸出翻轉過後的數字。 例如輸入是二進位1010111 逆序翻轉後是 1110101,對應的十進位數值是117 測試範例 Example 1: Input: n = 00000010100101000
Thumbnail
題目敘述 Sort Array by Increasing Frequency Leetcode #1636 給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素。 如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。 測試範例 Example 1: Input: nums
Thumbnail
題目敘述 Patching Array 題目給定一個整數陣列, 請問還要補上多少個數字,才能用這些數字的和拼湊出所有1~n的整數。
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
給定一個輸入陣列,計算最長遞增子序列的總數。本題和Longest Common Subsequence相似,需要設定一個計數器,記錄最長遞增子序列的數量。透過DP模型的化簡方式來解決問題。時間複雜度為O(n^2),空間複雜度為O(n)。主要使用回頭看的技巧,找出比較小的元素去延伸遞增子序列的長度。
Thumbnail
給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出。這篇文章介紹如何使用字典統計出現次數,和字典取交集的方法來解決此問題。並提供了複雜度分析和關鍵知識點。
Thumbnail
Append Characters to String to Make Subsequence 給定兩個字串s和字串t。 請計算最少的字元串接數量是多少,串接在s的尾端,使得t是s的子序列。 測試範例 Example 1: Input: s = "coaching", t =
Thumbnail
題目敘述 題目會給定一個整數陣列arr,要求我們判斷是否每個元素的出現次數都不同? 題目的原文敘述 測試範例 Example 1: Input: arr = [1,2,2,1,1,3] Output: true Explanation: The value 1 has 3 occurre