C++ 中的最佳劃分


假設我們有一個正整數列表;相鄰的整數將執行浮點除法。例如,[2,3,4] -> 2 / 3 / 4。現在,我們可以在任何位置新增任意數量的括號來更改這些操作的優先順序。我們應該找出如何新增括號以獲得最大結果,我們必須找到字串格式的對應表示式。我們的表示式不應該包含冗餘的括號。因此,如果輸入類似於 [1000,100,10,2],則結果將為“1000/(100/10/2)”。

為了解決這個問題,我們將遵循以下步驟:

  • n := nums 陣列的大小
  • 如果 n 為 0,則返回一個空字串。
  • num := nums[0] 作為字串
  • 如果 n 為 1,則返回 num
  • 如果 n 為 2,則返回 num 連線 /,連線 nums[1] 作為字串
  • den := 一個空字串
  • 對於 i 在範圍 1 到 n – 1 內
    • den := den + nums[i] 作為字串
    • 如果 i 不等於 n – 1,則 den := den 連線 ‘/’
  • 返回 num 連線 / 連線(連線 den ,連線)

讓我們看看下面的實現以更好地理解:

示例

 即時演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   string optimalDivision(vector<int>& nums) {
      int n = nums.size();
      if(n == 0) return "";
      string num = to_string(nums[0]);
      if(n == 1) return num;
      if(n == 2) return num + "/" + to_string(nums[1]);
      string den = "";
      for(int i = 1; i < n; i++){
         den += to_string(nums[i]);
         if(i != n - 1) den += "/";
      }
      return num + "/" + "(" + den + ")";
   }
};
main(){
   vector<int> v = {1000,100,10,2};
   Solution ob;
   cout << (ob.optimalDivision(v));
}

輸入

[1000,100,10,2]

輸出

1000/(100/10/2)

更新於: 2020年5月4日

257 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.