返回展开矩阵中的上一个元素

我们有一个方阵,它的大小不断地扩大2倍。给定矩阵中任意时刻(i,j)处的序列,我们需要返回(i,(j+N-1)%N)处的序列,其中N是矩阵的大小。 当我们说矩阵正在扩展时,扩展后的矩阵是通过将原始2×2矩阵的每个元素与当前的nxn矩阵本身相乘而形成的。扩展矩阵的维数为2N x 2N。

null
For Instance, consider below 2x2 matrix,  [a b]  Expanding it will result in a 4x4 matrix as follows:ax[a b]  bx[a b]      [aa ab ba bb]            [ac ad bc bd]                  --> [ca cb da db]cx[a b]  dx[a b]      [cc cd dc dd]      Expanding it again results in an 8x8 matrix as follows, and so on.ax[aa ab ba bb]   bx[aa ab ba bb]     [aaa aab aba abb baa bab bba bbb]  [ac ad bc bd]     [ac ad bc bd]     [aac aad abc abd bac bad bbc bbd]  [ca cb da db]     [ca cb da db]     [aca acb ada adb bca bcb bda bdb]  [cc cd dc dd]     [cc cd dc dd]     [acc acd adc add bcc bcd bdc bdd]                                  --> [caa cab cba cbb daa dab dba dbb]cx[aa ab ba bb]   dx[aa ab ba bb]     [cac cad cbc cbd dac dad dbc dbd]  [ac ad bc bd]     [ac ad bc bd]     [cca ccb cda cdb dca dcb dda ddb]  [ca cb da db]     [ca cb da db]     [ccc ccd cdc cdd dcc dcd ddc ddd]  [cc cd dc dd]     [cc cd dc dd]

基本上,对于一个给定的序列,我们需要找出剩下的序列。矩阵可以假设为圆形,即位置(i,0)处的序列应返回位置(i,N-1)处的序列 例如:

Input: str = ddaOutput: dcbInput: str = ccaOutput: ddbInput: str = aacbddcOutput: aacbdcd  

我们强烈建议您尽量减少浏览器,并先自己尝试。 如果我们仔细分析,我们可以看到一种模式。 算法: 我们从最右边的位置开始扫描字符串,并对每个字符执行以下操作- 1.如果当前字符为“b”或“d”,则分别更改为“a”或“c”,并返回字符串。 2.如果当前字符为“a”或“c”,则分别将其更改为“b”或“d”,并移至左侧的下一个字符。对下一个左字符重复步骤1。

C++

// C++ Program to return previous element in an expanding
// matrix.
#include <bits/stdc++.h>
using namespace std;
// Returns left of str in an expanding matrix of
// a, b, c, and d.
string findLeft(string str)
{
int n = str.length();
// Start from rightmost position
while (n--)
{
// If the current character is ‘b’ or ‘d’,
// change to ‘a’ or ‘c’ respectively and
// break the loop
if (str[n] == 'd' )
{
str[n] = 'c' ;
break ;
}
if (str[n] == 'b' )
{
str[n] = 'a' ;
break ;
}
// If the current character is ‘a’ or ‘c’,
// change it to ‘b’ or ‘d’ respectively
if (str[n] == 'a' )
str[n] = 'b' ;
else if (str[n] == 'c' )
str[n] = 'd' ;
}
return str;
}
// driver program to test above method
int main()
{
string str = "aacbddc" ;
cout << "Left of " << str << " is "
<< findLeft(str);
return 0;
}


JAVA

// Java program to return previous element
// in an expanding matrix
import java.io.*;
class GFG
{
// Returns left of str in an expanding matrix
// of a, b, c  and d.
static StringBuilder findLeft(StringBuilder str)
{
int n = str.length();
// Start from rightmost position
while (n > 0 )
{
n--;
// If the current character is b or d,
// change to a or c respectively and
// break the loop
if (str.charAt(n) == 'd' )
{
str.setCharAt(n, 'c' );
break ;
}
if (str.charAt(n) == 'b' )
{
str.setCharAt(n, 'a' );
break ;
}
// If the current character is a or c,
// change it to b or d respectively
if (str.charAt(n) == 'a' )
str.setCharAt(n, 'b' );
else if (str.charAt(n) == 'c' )
str.setCharAt(n, 'd' );
}
return str;
}
// driver program to test above method
public static void main (String[] args)
{
StringBuilder str = new StringBuilder( "aacbddc" );
System.out.print( "Left of " + str + " is " +
findLeft(str));
}
}
// This code is contributed by Prakriti Gupta


Python3

# Python3 Program to return previous element
# in an expanding matrix.
# Returns left of str in an
# expanding matrix of a, b, c, and d.
def findLeft( str ):
n = len ( str ) - 1 ;
# Start from rightmost position
while (n > 0 ):
# If the current character is ‘b’ or ‘d’,
# change to ‘a’ or ‘c’ respectively and
# break the loop
if ( str [n] = = 'd' ):
str = str [ 0 :n] + 'c' + str [n + 1 :];
break ;
if ( str [n] = = 'b' ):
str = str [ 0 :n] + 'a' + str [n + 1 :];
break ;
# If the current character is ‘a’ or ‘c’,
# change it to ‘b’ or ‘d’ respectively
if ( str [n] = = 'a' ):
str = str [ 0 :n] + 'b' + str [n + 1 :];
else if ( str [n] = = 'c' ):
str = str [ 0 :n] + 'd' + str [n + 1 :];
n - = 1 ;
return str ;
# Driver Code
if __name__ = = '__main__' :
str = "aacbddc" ;
print ( "Left of" , str , "is" , findLeft( str ));
# This code is contributed by PrinciRaj1992


C#

using System;
using System.Text;
// C# program to return previous element
// in an expanding matrix
public class GFG
{
// Returns left of str in an expanding matrix
// of a, b, c  and d.
public static StringBuilder findLeft(StringBuilder str)
{
int n = str.Length;
// Start from rightmost position
while (n > 0)
{
n--;
// If the current character is b or d,
// change to a or c respectively and
// break the loop
if (str[n] == 'd' )
{
str[n] = 'c' ;
break ;
}
if (str[n] == 'b' )
{
str[n] = 'a' ;
break ;
}
// If the current character is a or c,
// change it to b or d respectively
if (str[n] == 'a' )
{
str[n] = 'b' ;
}
else if (str[n] == 'c' )
{
str[n] = 'd' ;
}
}
return str;
}
// driver program to test above method
public static void Main( string [] args)
{
StringBuilder str = new StringBuilder( "aacbddc" );
Console.Write( "Left of " + str + " is " + findLeft(str));
}
}
// This code is contributed by Shrikant13


PHP

<?php
// PHP program to return previous element in an expanding
// matrix.
// Returns left of str in an expanding matrix of
// a, b, c  and d.
function findLeft( $str )
{
$n = strlen ( $str );
// Start from rightmost position
while ( $n --)
{
// If the current character is ‘b’ or ‘d’,
// change to ‘a’ or ‘c’ respectively and
// break the loop
if ( $str [ $n ] == 'd' )
{
$str [ $n ] = 'c' ;
break ;
}
if ( $str [ $n ] == 'b' )
{
$str [ $n ] = 'a' ;
break ;
}
// If the current character is ‘a’ or ‘c’,
// change it to ‘b’ or ‘d’ respectively
if ( $str [ $n ] == 'a' )
$str [ $n ] = 'b' ;
else if ( $str [ $n ] == 'c' )
$str [ $n ] = 'd' ;
}
return $str ;
}
// Driver Code
$str = "aacbddc" ;
echo "Left of " . $str . " is "
. findLeft( $str );
return 0;
?>


Javascript

<script>
// Javascript program to return previous element
// in an expanding matrix
String.prototype.replaceAt = function (index, replacement)
{
return this .substr(0, index) + replacement + this .substr(index + replacement.length);
}
// Returns left of str in an expanding matrix
// of a, b, c and d.
function findLeft(str)
{
let n = str.length;
// Start from rightmost position
while (n > 0)
{
n--;
// If the current character is b or d,
// change to a or c respectively and
// break the loop
if (str[n] == 'd' )
{
str = str.replaceAt(n, 'c' );
break ;
}
if (str[n] == 'b' )
{
str = str.replaceAt(n, 'a' );
break ;
}
// If the current character is a or c,
// change it to b or d respectively
if (str[n] == 'a' )
str = str.replaceAt(n, 'b' );
else if (str[n] == 'c' )
str = str.replaceAt(n, 'd' );
}
return str;
}
// driver program to test above method
let str = "aacbddc" ;
document.write( "Left of " + str + " is " +
findLeft(str));
// This code is contributed by rag2127.
</script>


输出:

Left of aacbddc is aacbdcd

本文由 阿迪蒂亚·戈尔 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享