Skip to main content

Rotate Image Solution | Leetcode (In-place)

Introduction:
In this tutorial we will try to solve Rotate Image problem from Leetcode. it is an important question from coding interview point of view. so let's try to solve it.

Problem Statement:
We have give a n*n 2D matrix. and we have to rotate it by 90 degree in Clockwise direction.
Actually if you know little bit about Image Processing, then You already know that for manipulation or processing purpose we represent any image in the form of a 2D matrix. that's why the name of the problem is Rotate Image, which is quite relatable.

Given input matrix =
[
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 

Output:
[ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ]

Solution:
whenever you find these type of problem related to 2D matrix. then think in this way.
In any 2D matrix there will be four corner points, leftTop, rightTop, leftDown, rightDown. so we have to keep track of these four points. and we need an extra variable which will keep track of when we will stop doing this or when we will stop our execution.


Full Code:

 void rotate(vector<vector<int>>& matrix) {
    int s=matrix.size()-1;
    int m=0;
    int j=s-m;
    while(m<j){
        int i=m,k=s-m,l=s-m;
    while(i<j){
        int temp=matrix[m][i];
        matrix[m][i]=matrix[l][m];
        int temp1=matrix[i][j];
        matrix[i][j]=temp;
        temp=matrix[k][l];
        matrix[k][l]=temp1;
        matrix[l][m]=temp;
        i++;
        l--;
    }
    m++;
    if(m>j){
        break;
    }
    j=s-m;
}
    }

In this solution I am using 5 variables m, i, j, k, l;
m = when we will go to next row and when we will stop execution.
i = it will keep track of uppermost row.
j = it will keep track of rightmost column.
k=it will keep track of lowermost row.
l=it will keep track of leftmost column.

do a dry run and then you will completely understand the code.
still if you have any query, just comment it down.


Comments

Popular posts from this blog

Disjiont Set Union-Find Data Structure | Code In C++

 Introduction:  In this tutorial we are going to write full program of disjoint set union find advance data structure in c++.  Problem Description: Disjoint Set Union (DSU) is an advance data structure, which basically uses in graph algorithms to find cycles. Codes:  Method1: Brute Force #include<bits/stdc++.h> using namespace std; int find(int f,vector<int>&dsuf){     if(dsuf[f]==-1)         return f;     return find(dsuf[f],dsuf); } void union_op(int from, int to, vector<int>& dsuf){     dsuf[from]=to; } bool isCycle(vector<pair<int,int> >&edge_list, vector<int>&dsuf){     for(int i=0;i<edge_list.size();i++){         int parent1=find(edge_list[i].first,dsuf);         int parent2=find(edge_list[i].second,dsuf);         if(parent1==pare...

Target Sum | Backtracking Problem

Introduction: In this tutorial we are going to solve a problem "Target Sum" which is from leetcode. and believe me it's really a good problem to understand Backtracking(Recursion). and if you try to understand the problem as well as code you will get a clear picture of Backtracking. Problem Statement: Link To Problem You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and - . For each integer, you should choose one from + and - as its new symbol. Find out how many ways to assign symbols to make sum of integers equal to target S. Input: nums is [1, 1, 1, 1, 1], S is 3. Output: 5 Explanation: -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 There are 5 ways to assign symbols to make the sum of nums be target 3. Solution: As given in question, we have two operation + and -. so we will make recursive call for + and - . and if we have sum as target and we have reached upto the last ind...

Group Anagrams solution with explanation:Leetcode solution

what is Anagrams? suppose we have two strings and the characters present in both of the strings are same. then both will be called anagram of each other. eg:" rat" and "art" both are anagram of each other. the characters present in both string are same. eg: "raat" and "art" these are not anagrams of each other. and the reason is that the frequency of "a" in "raat" is 2. while the frequency of "a" in "art" is 1. so these are not anagrams of each other. in short two strings will be anagram of each other if they have same characters and the count(frequency) of each and every character must be same in both strings. Solution: There are different ways to solve this question, so here we are going to use Hashmap to solve this question. cause whenever there is need to search we should go with the data structure which use balanced binary tress or hashing. and we know that Hashmap  uses balanced binary trees. so using...