📜  缩短回文时间所需的最少分钟数

📅  最后修改于: 2021-04-22 03:02:32             🧑  作者: Mango

给定一个字符串str ,它将24小时格式中的时间存储为“ HH:MM” 。任务是找到使回文时间最短需要增加的分钟数。

例子:

方法:
这个想法是贪婪地增加分钟值,直到时间值变成回文。运行while循环以增加分钟值,并同时检查小时值和分钟值是否形成回文。
当增加分钟和小时值时,请确保在分钟值为60且小时值为24时检查基本条件。

下面是上述方法的实现:

C++
// C++ program for the above approach 
#include  
using namespace std; 
  
// Function to get the required minutes 
int get_palindrome_time(string str) 
{ 
    int hh, mm; 
  
    // Storing hour and minute value 
    // in integral form 
    hh 
        = (str[0] - 48) * 10 
        + (str[1] - 48); 
    mm 
        = (str[3] - 48) * 10 
        + (str[4] - 48); 
  
    int requiredTime = 0; 
  
    // Keep iterating till first digit 
    // hour becomes equal to second 
    // digit of minute and second digit 
    // of hour becomes equal to first 
    // digit of minute 
    while (hh % 10 != mm / 10 
        || hh / 10 != mm % 10) { 
  
        ++mm; 
  
        // If mins is 60, increase hour, and 
        // reinitilialized to 0 
        if (mm == 60) { 
            mm = 0; 
            ++hh; 
        } 
  
        // If hours is 60, reinitialized to 0 
        if (hh == 24) 
            hh = 0; 
        ++requiredTime; 
    } 
  
    // Return the required time 
    return requiredTime; 
} 
  
// Driver Code 
int main() 
{ 
    // Given Time as a string 
    string str = "05:39"; 
  
    // Function Call 
    cout << get_palindrome_time(str) 
        << endl; 
}


Java
// Java program for the above approach 
class GFG{ 
      
// Function to get the required minutes 
public static int get_palindrome_time(String str) 
{ 
    int hh, mm; 
  
    // Storing hour and minute value 
    // in integral form 
    hh = (str.charAt(0) - 48) * 10 + 
        (str.charAt(1) - 48); 
    mm = (str.charAt(3) - 48) * 10 + 
        (str.charAt(4) - 48); 
  
    int requiredTime = 0; 
  
    // Keep iterating till first digit 
    // hour becomes equal to second 
    // digit of minute and second digit 
    // of hour becomes equal to first 
    // digit of minute 
    while (hh % 10 != mm / 10 || 
        hh / 10 != mm % 10) 
    { 
        ++mm; 
  
        // If mins is 60, increase hour, and 
        // reinitilialized to 0 
        if (mm == 60) 
        { 
            mm = 0; 
            ++hh; 
        } 
  
        // If hours is 60, reinitialized to 0 
        if (hh == 24) 
            hh = 0; 
        ++requiredTime; 
    } 
  
    // Return the required time 
    return requiredTime; 
} 
  
// Driver code 
public static void main(String[] args) 
{ 
      
    // Given Time as a string 
    String str = "05:39"; 
  
    // Function Call 
    System.out.println(get_palindrome_time(str)); 
} 
} 
  
// This code is contributed by divyeshrabadiya07


Python3
# Python3 program for the above approach 
  
# Function to get the required minutes  
def get_palindrome_time(str):
      
    # Storing hour and minute value 
    # in integral form
    hh = ((ord(str[0]) - 48) * 10 + 
          (ord(str[1]) - 48))
    mm = ((ord(str[3]) - 48) * 10 +
          (ord(str[4]) - 48))
      
    requiredTime = 0
  
    # Keep iterating till first digit 
    # hour becomes equal to second 
    # digit of minute and second digit 
    # of hour becomes equal to first 
    # digit of minute 
    while (hh % 10 != mm // 10 or 
          hh // 10 != mm % 10):
        mm += 1
  
        # If mins is 60, increase hour, and 
        # reinitilialized to 0 
        if (mm == 60):
            mm = 0
            hh += 1
  
        # If hours is 60, reinitialized to 0 
        if (hh == 24):
            hh = 0
              
        requiredTime += 1; 
          
    # Return the required time 
    return requiredTime
      
if __name__=="__main__":
      
    # Given Time as a string 
    str = "05:39"; 
  
    # Function call 
    print(get_palindrome_time(str));
  
# This code is contributed by rutvik_56


C#
// C# program for the above approach 
using System; 
  
class GFG{ 
      
// Function to get the required minutes 
public static int get_palindrome_time(string str) 
{ 
    int hh, mm; 
  
    // Storing hour and minute value 
    // in integral form 
    hh = (str[0] - 48) * 10 + 
        (str[1] - 48); 
    mm = (str[3] - 48) * 10 + 
        (str[4] - 48); 
  
    int requiredTime = 0; 
  
    // Keep iterating till first digit 
    // hour becomes equal to second 
    // digit of minute and second digit 
    // of hour becomes equal to first 
    // digit of minute 
    while (hh % 10 != mm / 10 || 
        hh / 10 != mm % 10) 
    { 
        ++mm; 
  
        // If mins is 60, increase hour, 
        // and reinitilialized to 0 
        if (mm == 60) 
        { 
            mm = 0; 
            ++hh; 
        } 
  
        // If hours is 60, reinitialized to 0 
        if (hh == 24) 
            hh = 0; 
        ++requiredTime; 
    } 
  
    // Return the required time 
    return requiredTime; 
} 
  
// Driver code 
public static void Main(string[] args) 
{ 
      
    // Given Time as a string 
    string str = "05:39"; 
  
    // Function Call 
    Console.Write(get_palindrome_time(str)); 
} 
} 
  
// This code is contributed by rutvik_56


输出:
11

时间复杂度: O(1)
辅助空间: O(1)