


JavaScript program to check if all rows of a matrix are cyclic rotations of each other
Matrix is a kind of 2-D array in which there is an array of fixed arrays that defines the rows and for each index of this array there are fixed length arrays present and the length of these arrays defines the number of columns present in the matrix. We can store any kind of data type in these cells provided by the matrix.
We will be provided with a matrix and each row contains some integers and we have to check if each row is the rotation of one another or not. Rotation of each other means by some number or left or right rotations we can produce the same combination of each row.
Example 1
让我们假设给定的矩阵是:
mat = [ [1, 2, 3], [2, 3, 1], [3, 1, 2]] Output: Yes
Explanation: Assuming the first row is constant and rotating the remaining one we can get the result as:
By rotating the second row one time to the right and rotating the second row two times to the right we can make both same as the first row.
Example 2
的翻译为:示例2
mat = [ [1, 2, 3], [ 2, 1, 3], [ 1, 2, 3]] Output: No
解释:在上面的矩阵中,第一行和第三行是相同的,但我们无法通过任意次数的旋转将第二行转换为第一行。
Approach
We have seen a proper example for understanding of the problem now let us see the steps to implement the code −
首先,我们将定义一个函数rotate,使用两个指针和交换技术来旋转作为参数传递给它的数组的元素。
之后,我们将定义检查函数,并将给定的矩阵传递给检查函数。
在该函数中,我们首先通过获取行和列的数量来获取矩阵的长度,并使用for循环从第1行到最后一行与第0行进行比较。
如果当前行与第一行相同,则我们将跳过到下一行。
否则,我们将调用 rotate 函数,并将给定的行旋转到其下一个旋转位置。
We will do this process until we find the same array as the zeroth row or length of columns numbers of times.
If the current row is not equal to the zeroth even after the maximum rotations then we will return false.
如果所有的行最终变得相等,那么我们将返回true。
Example
在下面的示例中,我们检查矩阵的所有行是否是彼此的循环旋转。输入和预期输出如下所示。
输入:matrix = [ [ 1, 2, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ] ]
Output: Yes
// function to rotate the given array function rotate(arr){ var l = 0; var r = arr.length-1; while(l < r){ arr[l] += arr[r]; arr[r] = arr[l]-arr[r]; arr[l] = arr[l]-arr[r]; l++; } return arr; } // function to check if the given matrix can have the same rows // after the certain number of rotations function check(mat){ // getting number of rows var rows = mat.length // getting number of columns var cols = mat[0].length // traversing over the each row of given matrix for(var i = 1; i < rows; i++){ var k = 0; while(k < cols) { var j = 0; for(j = 0; j<cols; j++){ if(mat[0][j] != mat[i][j]){ break; } } if(j == cols){ break; } else{ mat[i] = rotate(mat[i]); } k++; } if(k == cols){ return false; } } return true; } // defining the matrix var mat = [ [1, 2, 3], [2, 3, 1], [3, 1, 2]]; console.log("The given matrix is: "); console.log(mat); if(check(mat) == true){ console.log("Yes, all the rows of the matrix are circular rotation of each other"); } else{ console.log("NO, all the rows of the matrix are not in the circular rotation of each other"); }
输出
The given matrix is: [ [ 1, 2, 3 ], [ 2, 3, 1 ], [ 3, 1, 2 ] ] Yes, all the rows of the matrix are circular rotation of each other
时间和空间复杂度
The time complexity of the above code is O(N*M*M) where N is the number or rows and M is the number of columns present in the given matrix. We are traversing over the matrix row wise gives the factor or N and for comparison and rotations of the row’s givens the factor or M*M.
上述代码的空间复杂度为O(1),因为我们没有使用任何额外的空间。
Conclusion
在本教程中,我们已经实现了JavaScript程序,通过旋转每一行并与第一行进行比较,来检查给定矩阵的所有行是否彼此为循环旋转。我们使用了两个指针和交换方法来旋转给定矩阵的行。上述代码的时间复杂度为O(N*M*M),空间复杂度为O(1)。
The above is the detailed content of JavaScript program to check if all rows of a matrix are cyclic rotations of each other. For more information, please follow other related articles on the PHP Chinese website!

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

JavaScript's applications in the real world include server-side programming, mobile application development and Internet of Things control: 1. Server-side programming is realized through Node.js, suitable for high concurrent request processing. 2. Mobile application development is carried out through ReactNative and supports cross-platform deployment. 3. Used for IoT device control through Johnny-Five library, suitable for hardware interaction.

I built a functional multi-tenant SaaS application (an EdTech app) with your everyday tech tool and you can do the same. First, what’s a multi-tenant SaaS application? Multi-tenant SaaS applications let you serve multiple customers from a sing

This article demonstrates frontend integration with a backend secured by Permit, building a functional EdTech SaaS application using Next.js. The frontend fetches user permissions to control UI visibility and ensures API requests adhere to role-base

JavaScript is the core language of modern web development and is widely used for its diversity and flexibility. 1) Front-end development: build dynamic web pages and single-page applications through DOM operations and modern frameworks (such as React, Vue.js, Angular). 2) Server-side development: Node.js uses a non-blocking I/O model to handle high concurrency and real-time applications. 3) Mobile and desktop application development: cross-platform development is realized through ReactNative and Electron to improve development efficiency.

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment