C++での単調増加桁数
非負の整数Nがあるとすると、単調に増加する桁でN以下の最大数を見つける必要があります。隣接する数字のxとyの各ペアがx<=yを満たす場合にのみ、整数の数字が単調に増加することがわかっています。したがって、入力が332の場合、結果は299になります。
これを解決するには、次の手順に従います-
- s:=文字列としてのN、i:=1、n:=sのサイズ
- while i
=s [i – 1] - iを1増やします
- if i
- i>0かつs[i– 1]> s [i]の場合、
- iを1つ減らします
- s[i]を1つ減らします
- i>0かつs[i– 1]> s [i]の場合、
- s [j]:=‘9’
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int monotoneIncreasingDigits(int N) { string s = to_string(N); int i = 1; int n = s.size(); while(i < n && s[i] >= s[i - 1]) i++; if( i < n) while(i > 0 && s[i - 1] > s[i]){ i--; s[i]--; } for(int j = i + 1; j < n; j++)s[j] = '9'; return stoi(s); } }; main(){ Solution ob; cout << (ob.monotoneIncreasingDigits(332)); }
入力
332
出力
299
-
C++プログラムでK桁を削除する
数のシーケンスが、少なくとも3つの要素で構成されていて、2つの連続する要素の差が同じである場合、算術と呼ばれるとします。したがって、たとえば、これらは等差数列です:[1、3、5、7、9]、[7、7、7、7]、[3、-1、-5、-9]、しかし次のシーケンスはそうではありません算術。 [1、1、2、5、7] ここで、N個の数値で構成されるゼロインデックス配列Aが与えられます。その与えられた配列のスライスは、0 <=P
-
C++でK桁を削除する
文字列として表される非負の整数numがあるとすると、新しい数値が可能な限り最小になるように、数値からk桁を削除する必要があります。したがって、入力が「1432219」のようで、k =3の場合、結果は「1219」になります。 これを解決するには、次の手順に従います- スタックstを定義し、空の文字列retを作成します n:=numのサイズ 0からn–1の範囲のiの場合 num [i] スタックから削除し、kを1減らします stにnum[i]を挿入します kが0でない場合、スタックから要素を削除します スタックが空ではない間 ret: