<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)386:字典序排數(shù)

          共 4208字,需瀏覽 9分鐘

           ·

          2021-09-22 20:06

          算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問(wèn)題叫做 字典序排數(shù),我們先來(lái)看題面:
          https://leetcode-cn.com/problems/lexicographical-numbers/

          Given an integer n, return all the numbers in the range [1, n] sorted in lexicographical order.


          You must write an algorithm that runs in O(n) time and uses O(1) extra space. 

          給定一個(gè)整數(shù) n, 返回從 1 到 n 的字典順序。

          示例


          給定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。
          請(qǐng)盡可能的優(yōu)化算法的時(shí)間復(fù)雜度和空間復(fù)雜度。輸入的數(shù)據(jù) n 小于等于 5,000,000。


          解題


          主要思路:
          (1)直接自定義排序,既先將n范圍內(nèi)的數(shù)字存入到數(shù)組中,然后定義比較字典序的比較函數(shù)進(jìn)行排序;
          (2)既先將兩個(gè)數(shù)字轉(zhuǎn)成字符串,然后使用字符串進(jìn)行字典序的比較;

          class Solution {
          public:
              vector<int> lexicalOrder(int n) {
                  vector<int> nums(n,0);
                  for(int i=0;i<n;++i){//存入范圍內(nèi)的所有數(shù)字
                      nums[i]=i+1;
                  }
                  //使用自定義函數(shù)進(jìn)行排序
                  sort(nums.begin(),nums.end(),[](int& lhs,int& rhs){
                    //先將兩個(gè)整數(shù)轉(zhuǎn)成字符串,使用字符串進(jìn)行比較
                      string str1=to_string(lhs);
                      string str2=to_string(rhs);
                      int pos=0;
                      while(pos<str1.size()||pos<str2.size()){
                          if(pos<str1.size()&&pos<str2.size()){//都在范圍內(nèi),比較字符的大小
                              if(str1[pos]<str2[pos]){
                                  return true;
                              }
                              else if(str1[pos]>str2[pos]){//不在范圍內(nèi),比較字符串的長(zhǎng)度
                                  return false;
                              }
                          }
                          else if(str1.size()<str2.size()){
                              return true;
                          }
                          else{
                              return false;
                          }
                          ++pos;
                      }
                      return true;
                  });
                  return nums;
              }
          };


          好了,今天的文章就到這里,如果覺得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:

          LeetCode1-380題匯總,希望對(duì)你有點(diǎn)幫助!

          LeetCode刷題實(shí)戰(zhàn)381:O(1) 時(shí)間插入、刪除和獲取隨機(jī)元素

          LeetCode刷題實(shí)戰(zhàn)382:鏈表隨機(jī)節(jié)點(diǎn)

          LeetCode刷題實(shí)戰(zhàn)383:贖金信

          LeetCode刷題實(shí)戰(zhàn)384:打亂數(shù)組

          LeetCode刷題實(shí)戰(zhàn)385:迷你語(yǔ)法分析器


          瀏覽 38
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕久久人妻无码精品蜜桃 | 国产中文字幕网站 | 爆操小逼| 人兽AV | 五月丁香中文字幕成人网在线 |