3

私は一連の非負の整数を与えられました。

43 18 5 67 1 72 16 17 15 93 38 6 83 10 49 98 7 47 61 52 71 79 82 52 8

Outside-Inからm*n配列に格納する必要があります。次のように:

m = 5
n = 5

外で

次に、2D配列の特定の部分の合計を計算する必要があります。(私はすでにこの部分を行っています)

数字を保存するための私の理想的なアプローチ:

 1. Initialize starti,startj = 0.
 2. Initialize endi = m , endj = n.
 3. Store the remaining numbers in array[starti][j], where j starts from startj and ends at endj.
 4. Store the remaining numbers in array[i][endj], where i starts from starti and ends at endi.
 5. Store the remaining numbers in array[endi][j], where j starts from endj and ends at startj.
 6. Store the remaining numbers in array[i][endj], where i starts from endi and ends at starti.
 7. Decrement endi and endj by 1. 
 8. Increment starti and start j by 1.
 9. Repeat the steps 3 - 8 until the last number is stored.

質問:この問題を解決するためのより良い方法はありますか?

追加:私は思いついた(しかし失敗したformula to find where the last element is stored before doing all these operation.

4

1 に答える 1

0

これが1つの方法です。

まず、再帰的に考え始めることができます

`fill(m、n、starting_position、direction)のようなシグネチャを持つメソッドがあります

再帰バージョンは次のようになります

fill(m,n, starting_position, direction) {

// If m=0 or n=0 you have a base case.
// Start at starting position, and fill in the direction.
// Decrement m or n, depending on the direction
// Compute new starting position and direction
// Recursively call fill with the updated m,n, starting_pos, direction
}

ここで、このメソッドは末尾再帰であることに注意してください。したがって、再帰を取り除き、基本ケースから派生したwhileループの条件を使用してwhileループに置き換えることができます。

于 2013-03-15T10:12:33.433 に答える