<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刷題實戰(zhàn)247:中心對稱數(shù)II

          共 3953字,需瀏覽 8分鐘

           ·

          2021-04-28 13:23

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

          今天和大家聊的問題叫做 中心對稱數(shù)II,我們先來看題面:
          https://leetcode-cn.com/problems/strobogrammatic-number-ii/

          A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside down).

          Find all strobogrammatic numbers that are of length = n.

          中心對稱數(shù)是指一個數(shù)字在旋轉(zhuǎn)了 180 度之后看起來依舊相同的數(shù)字(或者上下顛倒地看)。找到所有長度為 n 的中心對稱數(shù)。

          示例

          示例 :
          輸入: n = 2
          輸出: ["11","69","88","96"]


          解題


          找出所有的可能,必然是深度優(yōu)先搜索。但是每輪搜索如何建立臨時的字符串呢?因為數(shù)是“對稱”的,我們插入一個字母就知道對應位置的另一個字母是什么,所以我們可以從中間插入來建立這個臨時的字符串。這樣每次從中間插入兩個“對稱”的字符,之前插入的就被擠到兩邊去了。這里有幾個邊界條件要考慮:

          如果是第一個字符,即臨時字符串為空時進行插入時,不能插入'0',因為沒有0開頭的數(shù)字

          如果n=1的話,第一個字符則可以是'0'

          如果只剩下一個帶插入的字符,這時候不能插入'6'或'9',因為他們不能和自己產(chǎn)生映射,翻轉(zhuǎn)后就不是自己了

          這樣,當深度優(yōu)先搜索時遇到這些情況,則要相應的跳過

          public class Solution {
              
              char[] table = {'0', '1', '8', '6', '9'};
              List<String> res;
              
              public List<String> findStrobogrammatic(int n) {
                  res = new ArrayList<String>();
                  build(n, "");
                  return res;
              }
              
              public void build(int n, String tmp){
                  if(n == tmp.length()){
                      res.add(tmp);
                      return;
                  }
                  boolean last = n - tmp.length() == 1;
                  for(int i = 0; i < table.length; i++){
                      char c = table[i];
                      // 第一個字符不能為'0',但n=1除外。只插入一個字符時不能插入'6'和'9'
                      if((n != 1 && tmp.length() == 0 && c == '0') || (last && (c == '6' || c == '9'))){
                          continue;
                      }
                      StringBuilder newTmp = new StringBuilder(tmp);
                      // 插入字符c和它的對應字符
                      append(last, c, newTmp);
                      build(n, newTmp.toString());
                  }
              }
              
              public void append(boolean last, char c, StringBuilder sb){
                  if(c == '6'){
                      sb.insert(sb.length()/2, "69");
                  } else if(c == '9'){
                      sb.insert(sb.length()/2, "96");
                  } else {
                      sb.insert(sb.length()/2, last ? c : ""+c+c);
                  }
              }
          }


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

          上期推文:

          LeetCode1-240題匯總,希望對你有點幫助!
          LeetCode刷題實戰(zhàn)241:為運算表達式設(shè)計優(yōu)先級
          LeetCode刷題實戰(zhàn)242:有效的字母異位詞
          LeetCode刷題實戰(zhàn)243:最短單詞距離
          LeetCode刷題實戰(zhàn)244:最短單詞距離 II
          LeetCode刷題實戰(zhàn)245:最短單詞距離 III
          LeetCode刷題實戰(zhàn)246:中心對稱數(shù)

          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产精品久久久久久久精 | 一级一级爱爱 | 操逼123网| 午夜免费无码视频 | 国产高清免费视频在线观看一区 |