Optimal Division

medium array math dp

Problem

Insert any number of parentheses into nums[0]/nums[1]/.../nums[n-1] so the resulting division value is maximal. Return that expression as a string.

Inputnums = [1000,100,10,2]
Output"1000/(100/10/2)"
The only way to make it bigger is to make the divisor smaller; group everything after nums[0].

def optimal_division(nums):
    if len(nums) == 1: return str(nums[0])
    if len(nums) == 2: return f"{nums[0]}/{nums[1]}"
    return f"{nums[0]}/(" + "/".join(map(str, nums[1:])) + ")"
function optimalDivision(nums) {
  if (nums.length === 1) return String(nums[0]);
  if (nums.length === 2) return `${nums[0]}/${nums[1]}`;
  return `${nums[0]}/(${nums.slice(1).join("/")})`;
}
class Solution {
    public String optimalDivision(int[] nums) {
        if (nums.length == 1) return String.valueOf(nums[0]);
        if (nums.length == 2) return nums[0] + "/" + nums[1];
        StringBuilder sb = new StringBuilder(); sb.append(nums[0]).append("/(");
        for (int i = 1; i < nums.length; i++) { sb.append(nums[i]); if (i + 1 < nums.length) sb.append('/'); }
        sb.append(')'); return sb.toString();
    }
}
string optimalDivision(vector& nums) {
    if (nums.size() == 1) return to_string(nums[0]);
    if (nums.size() == 2) return to_string(nums[0]) + "/" + to_string(nums[1]);
    string s = to_string(nums[0]) + "/(";
    for (int i = 1; i < (int)nums.size(); i++) { s += to_string(nums[i]); if (i + 1 < (int)nums.size()) s += '/'; }
    s += ')'; return s;
}
Time: O(n) Space: O(n)