Posts

Showing posts from June, 2019

1305. Integer to English Words

class Solution { public : /** * @param num: a non-negative integer * @return: english words representation */ string numberToWords ( int num) { string res = convertHundred(num % 1000 ); vector < string > v = { "Thousand" , "Million" , "Billion" }; for ( int i = 0 ; i < 3 ; ++i) { num /= 1000 ; res = num % 1000 ? convertHundred(num % 1000 ) + " " + v[i] + " " + res : res; } while (res.back() == ' ' ) res.pop_back(); return res.empty() ? "Zero" : res; } string convertHundred ( int num) { vector < string > v1 = { "" , "One" , "Two" , "Three" , "Four" , "Five" , "Six" , "Seven" , "Eight" , "Nine" , "Ten" , "Eleven" , "Twelve" , "Thirteen" ,...

1251. Split Array Largest Sum - double check

Binary search int splitArray ( vector < int >& nums, int m) { long long left = 0 , right = 0 ; for ( int i = 0 ; i < nums.size(); ++i) { left = max(( int )left, nums[i]); right += nums[i]; } while (left < right) { long long mid = left + (right - left) / 2 ; if (can_split(nums, m, mid)) right = mid; else left = mid + 1 ; } return left; } bool can_split ( vector < int >& nums, int m, int sum) { int cnt = 1 , curSum = 0 ; for ( int i = 0 ; i < nums.size(); ++i) { curSum += nums[i]; if (curSum > sum) { curSum = nums[i]; ++cnt; if (cnt > m) return false ; } } return true ; } DP int splitArray ( vector < int > &nums, int m) { // write your code here int n = nums.s...

744. Sum of first K even-length Palindrome numbers

class Solution { public : /** * @param k: Write your code here * @return: the sum of first k even-length palindrome numbers */ int sumKEven ( int k) { // int res = 0 ; for ( int i = 1 ; i <= k; i++){ int temp = i; int pali = i; while (temp > 0 ){ pali = pali* 10 + temp% 10 ; temp /= 10 ; } res += pali; } return res; } };

653. Expression Add Operators

class Solution { public : vector < string > addOperators( string num, int target) { vector < string > res; helper(num, target, 0 , 0 , "" , res); return res; } void helper ( string num, int target, long diff, long curNum, string out, vector < string >& res) { if (num.size() == 0 && curNum == target) { res.push_back(out); return ; } for ( int i = 1 ; i <= num.size(); ++i) { string cur = num.substr( 0 , i); if (cur.size() > 1 && cur[ 0 ] == '0' ) return ; string next = num.substr(i); if (out.size() > 0 ) { helper(next, target, stoll(cur), curNum + stoll(cur), out + "+" + cur, res); helper(next, target, -stoll(cur), curNum - stoll(cur), out + "-" + cur, res); helper(next, target, diff * s...

602. Russian Doll Envelopes

超时, 但是不理解二分的方法。就这样吧 https://www.cnblogs.com/grandyang/p/4938187.html 和longest increasing subsequence相似的 class Solution { public : /* * @param envelopes: a number of envelopes with widths and heights * @return: the maximum number of envelopes */ static bool cmp1 ( const pair< int , int > a, const pair< int , int > b) { return a.first < b.first || (a.first == b.first && a.second > b.second); } int maxEnvelopes ( vector <pair< int , int >>& envelopes) { // write your code here const int size = envelopes.size(); if (size == 0 ){ return 0 ; } sort(envelopes.begin(), envelopes.end(), cmp1); vector < int > f(size, 1 ); f[ 0 ] = 1 ; int res = 1 ; for ( int i = 1 ; i < size; i++){ for ( int j = i - 1 ; j >= 0 ; j--){ if (envelopes[i].second > envelopes[j].sec...