力扣精選算法100道——Z字形變換(模擬專題)

目錄

🎈了解題意

🎈算法原理

🚩先處理第一行和最后一行

🚩再處理中間行

🎈實現代碼


🎈了解題意

大家看到這個題目的時候肯定是很迷茫的,包括我自己也是搞不清楚題目什么意思,我們靜下心來看看我來給大家說透徹這個題目的意思。

我們輸入字符串"ABCDEFGHIJKL",行數是四行時,我們是按照Z字形排列。先向下排四行,然后斜向上排列到四行之后,然后向下排列四行......。(我們用一塊一塊的方格來填字符)

然后我們輸出的是像數組一樣遍歷 輸出結果是 AGBFHLCEIKDJ 字符串。


🎈算法原理

我們舉例輸入的是? ?ABCDEFGHIJKMNOP? 這段字符串,我們輸出的字符串就是從第一行第一列遍歷到最后一行最后一列。

🚩先處理第一行和最后一行

我們從第一行分析,我們看到 AGM之間的距離 A和G之間的距離是6,G與M之間的距離是6,我們就可以看到對于第一行來說,我們只需要循環從0開始,每次+6,就給新字符串更新結果。6是相當于公差d=6,6是怎么來的呢?

我們的公差6其實相當于,將F向左移一列,然后倆列一共是8個元素,然后減去2個空格就是公差了那么我們就衍生一個公式 ?公差d=2n-2 (n代表行數),舉一個例子當然是不能足以證明結果,我們給n設定3行,我們看看第一行公差是不是d=2*3-2=4.

我們看到,d=2n-2,n等于3的時候d=4,公差是4,確實驗證了我們的猜想。所以第一行每個元素的相差的距離是2n-2的距離(n代表行數)

        string ret;//定義個最終字符串結果int d=2*numRows-2,n=s.size();//公差為2n-2,n代表原字符串的長度//1.先處理第一行for(int i=0;i<n;i+=d)//每次都加上公差{ret+=s[i];//更新結果}

?同樣的,我們看到最后一行其實和第一行是同樣的原理。

        //處理最后一行for(int i=numRows-1;i<n;i+=d){ret+=s[i];}

🚩再處理中間行

我們看到BHN綠色線指向的,B和H相差6,H和N相差6,和第一行和最后一行一樣的思路,那么我們中間的FL和EK紫色線畫的,我們看到F和L相差的結果也是6,EK相差的結果也是6,所以還是再循環的時候加上公差d,那么我們如何確定F和E下標的值呢?還是和上面一樣的,我們是如何計算公差的呢?移動數據。字符在哪一列,我們就看前面列數的總空格數減去空白格即可。

  • G= 前面有3列一共有3*4=12格? 減去? 前面列數的空格數6 = 6 字符G的下標是處在原字符串下標6的位置
  • F= 前面有2列一共有2*4=8格? 減去? 前面列數的空格數3? =5 字符F的下標是處在原字符串下標5的位置

那么F相當于2n-3=5(n等于4,三個空格),E相當于n-0=4 (n等于4,0格空格)

我們如何確定F和E的開始值呢?

對于第二行 F的下標是5,公差是6, 相當于6-1=5

對于第三行 E的下標是4 ,公差是6? ?相當于6-2=4

所以我們進行依次循環,處理中間行,從k=1開始,第二行的第二個元素是d-k,到k=2時,第三行的第三個元素是d-k,然后當k=n-1=3的時候就結束了,因為第四行是最后一行。

     for(int k=1;k<numRows-1;k++){for(int i=k,j=d-k;i<n||j<n;i+=d,j+=d){if(i<n)ret+=s[i];if(j<n)ret+=s[j];}}

我們是先讓i對應的值先更新,然后再更新j對應的值,條件是i<n或者j<n,因為只要其中一個滿足的話,我們還是要更新結果。下面要進行判斷,否則就重復更新了。?


🎈實現代碼

class Solution {
public:string convert(string s, int numRows) {if(numRows==1)return s;string ret;int d=2*numRows-2,n=s.size();//1.先處理第一行for(int i=0;i<n;i+=d){ret+=s[i];}//2.處理中建行for(int k=1;k<numRows-1;k++){for(int i=k,j=d-k;i<n||j<n;i+=d,j+=d){if(i<n)ret+=s[i];if(j<n)ret+=s[j];}}//處理最后一行for(int i=numRows-1;i<n;i+=d){ret+=s[i];}return ret;}
};

開學壞,見面好。

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

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

相關文章

memcpy和strcat的區別

memcpy 函數&#xff1a; memcpy 函數用于在內存之間復制一定數量的字節。memcpy 是按字節進行復制的&#xff0c;可以用于復制任意類型的數據&#xff0c;不僅限于字符串。memcpy 不會自動添加字符串結束符號 \0&#xff0c;因此在復制字符串時&#xff0c;需要確保復制的字節…

喝點小酒-胡謅“編程語言學習”

今天&#xff0c; 與一個小哥們兒&#xff08;學習計算機科學與技術專業的&#xff0c;我兒子&#xff0c;這是真的&#xff09;一塊兒吃飯&#xff08;這頓飯&#xff0c;在家里吃的&#xff0c;吹個牛哈&#xff0c;我做的&#xff0c;三個葷菜、一個素材、一個湯、主食米飯 …

約瑟夫經典問題C++,STL容器queue解法

題目&#xff1a; Description n 個人圍成一圈&#xff0c;從第一個人開始報數,數到 m 的人出列&#xff0c;再由下一個人重新從 1 開始報數&#xff0c;數到m 的人再出圈&#xff0c;依次類推&#xff0c;直到所有的人都出圈&#xff0c;請輸出依次出圈人的編號。 注意&…

[linux]進程間通信(IPC)———共享內存(shm)(什么是共享內存,共享內存的原理圖,共享內存的接口,使用演示)

一、什么是共享內存 共享內存區是最快的&#xff08;進程間通信&#xff09;IPC形式。一旦這樣的內存映射到共享它的進程的地址空間&#xff0c;這些進程間數據傳遞不再涉及到內核&#xff0c;換句話說是進程不再通過執行進入內核的系統調用來傳遞彼此的數據。注意&#xff1a;…

Three.js初學(2)

Three.js初學&#xff08;2&#xff09; 三維坐標系的認識1. 輔助坐標系 光源的影響1. 光材質的影響2. 光源介紹點光源環境光平行光 3. 光源衰減/位置 相機控件1. 引入擴展庫2. 使用方法 三維坐標系的認識 這一章節的主要作用是加強自我對三維坐標空間的認識。 1. 輔助坐標系…

貓頭虎分享已解決Bug || TypeError: Cannot set property ‘innerHTML‘ of null

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …

華為配置直連三層組網隧道轉發示例

配置直連三層組網隧道轉發示例 組網圖形 圖1 配置直連三層組網隧道轉發示例組網圖 業務需求組網需求數據規劃配置思路配置注意事項操作步驟配置文件擴展閱讀 業務需求 企業用戶接入WLAN網絡&#xff0c;以滿足移動辦公的最基本需求。且在覆蓋區域內移動發生漫游時&#xff0c;不…

Linux 系統編程:文件編程

本篇涉及文件的創建、打開、讀和關閉。 文件為操作系統服務和設備提供了一個簡單而一致的 接口 。“接口”指的是一種約定或標準&#xff0c;通過提供一個一致的接口&#xff0c;可以為上層隱藏底層硬件和服務的復雜性&#xff0c;上層無需關注它們的具體實現細節。 比如操作系…

Kafka進階

文章目錄 概要應用場景消息隊列兩種模式kafka的基礎架構分區常見問題小結 概要 kafka的傳統定義&#xff1a;kafka是一個分布式的基于發布\訂閱模式的消息隊列&#xff0c;主要用于大數據實時處理領域。 kafka的最新概念&#xff1a;kafka是一個開源的分布式事件流平臺&#x…

隨機森林模型、模型模擬技術和決策樹模型簡介

隨機森林模型、模型模擬技術和決策樹模型簡介 隨機森林模型 隨機森林模型是一種比較新的機器學習模型&#xff0c;它是通過集成學習的方法將多個決策樹模型組合起來&#xff0c;形成一個更加強大和穩定的模型。隨機森林模型的基本原理是“數據隨機”和“特征隨機”&#xff0…

10種常見的光伏發電量計算方法

光伏發電是一種將太陽能轉化為電能的清潔能源技術。隨著環境保護意識的日益增強和能源結構的轉型&#xff0c;光伏發電得到了廣泛的應用。對于光伏系統來說&#xff0c;發電量的準確計算是評估系統性能、預測長期收益和優化系統運行的關鍵。以下是常見的光伏發電量計算方法&…

Vista 2.08: The storm chaser

A story about Mathew —— the storm chaser. "He is too young to understand his dream and the Harvard is just others dream put into his mind." "You dont have to chase for the happiness that defined by others. You must define your own happines…

Python3零基礎教程之Python解釋器與開發環境搭建

大家好&#xff0c;我是千與編程&#xff0c;碩士畢業于北京大學&#xff0c;曾先后就職于字節跳動&#xff0c;京東等互聯網大廠&#xff0c;目前在編程導航知識星球擔任星球嘉賓&#xff0c;著有《AI算法畢設智囊袋》&#xff0c;《保姆級帶你通關秋招教程》兩大專欄。 今天開…

從it方面介紹部分好玩的電影

電影推薦 1.《黑客帝國》《The matrix》 僅推薦第一二三部2. 《代碼奔騰》《code rush》3 人物傳記類 《社交網絡》 《硅谷傳奇》 《喬布斯》4《模仿游戲》也是傳記 但主演是 卷福5 《環形使者》6 《蝴蝶效應》 三部7.《隱私大盜》8.《監視資本主義&#xff1a;智能陷阱》9. 劇…

RMAN備份與恢復

文章目錄 一、RMAN介紹二、全量備份三、增量備份0級備份1級增量備份累積性差量備份總結 四、壓縮備份壓縮備份介紹壓縮備份操作壓縮備份優缺點 五、異常恢復1、恢復前的準備2、恢復數據庫 六、RMAN相關參數 一、RMAN介紹 RMAN&#xff08;Recovery Manager&#xff09;是Oracl…

在做了frp的實驗室服務器不同端口間傳輸文件

背景 實驗室有兩臺服務器&#xff0c;使用的是一個IP&#xff0c;兩個端口&#xff0c;給人看上去是一臺服務器的兩個端口&#xff0c;實際是兩臺服務器。 現在我需要從一個端口傳輸一個文件夾到另外一個端口&#xff0c;實際上是從一個機器傳輸到另外一個機器。 操作 在兩臺…

linux系統消息中間件rabbitmq部署鏡像集群

RabbitMQ鏡像集群配置 RabbitMQ鏡像集群配置創建鏡像集群:鏡像隊列策略設置說明 RabbitMQ鏡像集群配置 上面已經完成RabbitMQ默認集群模式&#xff0c;但并不保證隊列的高可用性&#xff0c;盡管交換機、綁定這些可以復制到集群里的任何一個節點&#xff0c;但是隊列內容不會復…

thonny 使用命令行安裝包并且替換源,安裝速度嗖嗖的

thonny 使用命令行安裝包并且替換源 點擊 “工具”->"打開系統shell"替換源下載嘎嘎快 點擊 “工具”->“打開系統shell” 替換源 pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/ pip config set global.trusted-host mirrors.aliy…

AI Agent幾篇不錯的概述和介紹

?2023年人工智能體(AI Agent)開發與應用全面調研&#xff1a;概念、原理、開發、應用、挑戰、展望 OpenAI的CEO都在談的 AI Agent&#xff0c;到底是什么&#xff1f; | 人人都是產品經理 AI智能體卷爆大模型&#xff01;4大Agent打擂&#xff0c;西部世界誰將成為軟件2.0&am…

快速學習安全框架 Springsecurity最新版(6.2)--用戶授權模塊

簡介 上一節Springsecurity 用戶認證 Springsecurity 擁有強大的認證和授權功能并且非常靈活&#xff0c;,一來說我們都i有以下需求 可以幫助應用程序實現以下兩種常見的授權需求&#xff1a; 用戶-權限-資源&#xff1a;例如張三的權限是添加用戶、查看用戶列表&#xff0c;李…