第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

嘗試解決算法問(wèn)題的曲折模式

嘗試解決算法問(wèn)題的曲折模式

瀟湘沐 2022-06-09 16:47:02
問(wèn)題如下:字符串“PAYPALISHIRING”在給定數(shù)量的行上以鋸齒形圖案寫入,如下所示:(您可能希望以固定字體顯示此圖案以提高可讀性)P   A   H   NA P L S I I GY   I   R然后逐行閱讀:“PAHNAPLSIIGYIR”編寫將采用字符串并在給定行數(shù)的情況下進(jìn)行此轉(zhuǎn)換的代碼:字符串轉(zhuǎn)換(字符串 s,int numRows);示例 1:輸入:s = "PAYPALISHIRING", numRows = 3 輸出:"PAHNAPLSIIGYIR" 示例 2:輸入:s = "PAYPALISHIRING", numRows = 4 輸出:"PINALSIGYAHRPI" 解釋:P     I    NA   L S  I GY A   H RP     I我已經(jīng)編寫了以下代碼,但是在如何將行標(biāo)記為一次向下移動(dòng)方面我陷入了困境,我增加了起始行,但是當(dāng)它曲折回到頂部時(shí),它應(yīng)該減少。我無(wú)法弄清楚在不影響向下運(yùn)動(dòng)的情況下進(jìn)行這項(xiàng)工作的邏輯。任何幫助,將不勝感激。const convert = (s, numRows) => {    let startRow = 0    let endRow = numRows - 1    let startColumn = 0    let endColumn = Math.floor((s.length / 2) - 1)    s = s.split('')    let results = []    // to setup the columns    for (let i = 0; i < numRows; i++) {        results.push([])    }    while (startRow <= endRow && startColumn <= endColumn && s.length) {        for (let i = startRow; i <= endRow; i++) {            results[i][startColumn] = s.shift()        }        for (let i = endRow - 1; i >= startRow; i--) {            results[i][startColumn + 1] = s.shift()            startColumn++        }        //this line seems to be the issue        startRow++    }    return results}console.log(convert('PAYPALISHIRING', 4))
查看完整描述

2 回答

?
拉丁的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

我重寫了您的 while 循環(huán),如下所示,我只是走“之字形”模式!希望它足夠簡(jiǎn)單易懂。


let c=0, row=0,col=0, down=0;

while(c<s.length) {

    results[row][col]=s[c];

    if(down==0) { // moving down 

        row++;

        if(row==numRows) {

            down = 1;

            col++;

            row-=2;

        }

    } else { // moving up

        row--;

        col++;

        if(row==0) {

            down=0;

        }

    }

    c++;

}

附言。上面的代碼無(wú)法處理numRows < 3,因此您必須在此循環(huán)之前管理它們。


查看完整回答
反對(duì) 回復(fù) 2022-06-09
?
德瑪西亞99

TA貢獻(xiàn)1770條經(jīng)驗(yàn) 獲得超3個(gè)贊

我的微積分有點(diǎn)生疏,但這個(gè)問(wèn)題背后的邏輯似乎是一個(gè)正弦波。我在創(chuàng)建阻止它工作的 sin 方程的某個(gè)地方出現(xiàn)了數(shù)學(xué)錯(cuò)誤(r 從不等于 c 與當(dāng)前參數(shù)),但如果這是您選擇的方向,希望這會(huì)有所幫助。


/*If x-axis is position in string, and y-axis is row number...

n=number of rows


Equation for a sin curve: y = A sin(B(x + C)) + D

D=vertical shift (y value of mid point)

D=median of 1 and n

n:  median:

1   1

2   1.5

3   2

4   2.5

5   3

6   3.5

7   4

median=(n+1)/2

D=(n+1)/2


A=amplitude (from the mid-point, how high does the curve go)

median + amplitude = number of rows

amplitude = number of rows - median

A=n-D


C=phase shift

Phase shift for a sin curve starting at its lowest point: 3π/2

(so at time 1, row number is 1, and curve goes up from there)

C=3π/2



Period is 2π/B

n   p

3   4

4   6

5   8

6   10

period=2(n-1)

2(n-1)=2π/B

B(2(n-1)=2π

B=2π/2(n-1)

B=π/(n-1)


Variables:

s = string

n = number of rows

c = current row number being evaluated

p = position in string

r = row number


*/

var output='';

function convert(s,n) {

    D=(n+1)/2

    A=n-D

    C=(3*Math.PI)/2

    B=Math.PI/(n-1)

  for (c=1;c<=n;c++) { //loop from 1st row to number of rows

    for (p=1;p<=s.length;p++) { //loop from 1st to last character in string

    r=A*Math.sin(B*(p+C))+D //calculate the row this character belongs in

        if (r==c) { output+= s.charAt(r) } //if the character belongs in this row, add it to the output variable. (minus one because character number 1 is at position 0)

}}

//do something with output here

}


查看完整回答
反對(duì) 回復(fù) 2022-06-09
  • 2 回答
  • 0 關(guān)注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)