blog

バージョン番号を比較する

質問に従って、'.各サブバージョン番号の2つのバージョンを分割し、左から右へ1つずつ比較する場合は、サブバージョン番号の数のバージョンは、他よりも、0サブバージョンとバージョンの少ないサブバージョンで...

Apr 23, 2020 · 2 min. read
シェア

質問に従って、'.2つのバージョンの各サブバージョン番号を分割し、左から右に1つずつ比較します。 一方のバージョンのサブバージョン番号の数が他方より多い場合、サブバージョンの数が少ない方のバージョンを0で表します。こうすることで、常に2つのバージョンのすべてのサブバージョンを比較することができます。

分割サブバージョンは、配列に格納されているサブバージョンに分割ダブルポインタを使用することができます、配列のサブバージョンの2つのバージョンに分かれて格納され、1つずつ配列を比較し、それらが背面に等しい場合は、それ以外の結果を返します。

配列が別の配列よりも大きい場合は、0と他の配列の残りの部分を比較する大きい方の配列の現在の要素を小さくし、比較のサイズまたは2つの配列が終了するまで比較を続行すると、2つのバージョン番号が同じであることを示す、0のリターンでオーバーしています。

コードは以下の通り:

class Solution {
public:
 int compareVersion(string version1, string version2) {
 vector<int> v1, v2;
 int i = 0;
 for(; i < version1.size(); ++i) {
 int j = i;
 while(j < version1.size() && version1[j] != '.') { //配列v1に格納されているサブバージョン番号を分割するためのダブルポインタ。
 ++j;
 }
 string subVer = version1.substr(i, j - i);
 v1.push_back(atoi(subVer.c_str()));
 i = j;
 }
 for(i = 0; i <version2.size(); ++i) {
 int j = i;
 while(j < version2.size() && version2[j] != '.') {
 ++j;
 }
 string subVer = version2.substr(i, j - i);
 v2.push_back(atoi(subVer.c_str()));
 i = j;
 }
 for(int i = 0; i < min(v1.size(), v2.size()); ++i) {
 if(v1[i] > v2[i]) {
 return 1;
 } else if(v1[i] < v2[i]) {
 return -1;
 }
 }
 if(v1.size() < v2.size()) {
 for(int i = v1.size(); i < v2.size(); ++i) {
 if(0 < v2[i]) { //もしv1のサイズがv2のサイズより小さければ、v1の足りない部分が0と比較され、v2が0と比較される。[i]比較、後者のサブバージョン番号が0であることを示す
 return -1;
 }
 }
 }
 if(v1.size() > v2.size()) {
 for(int i = v2.size(); i < v1.size(); ++i) {
 if(v1[i] > 0) {
 return 1;
 }
 }
 }
 return 0;
 }
};
Read next

まだ新しいオブジェクトの中にいるのか?オブジェクトを生成するための「抽象ファクトリーパターン」を使えば、臭いはしない!

今日は、ファクトリーデザインパターンに属するAbstract Factoryパターンを紹介します。 ファクトリーパターンは、特定の、特定の型、またはオブジェクトのバッチを大量に作成するときに使用される優れたソリューションであることを知って理解します。この記事では、"抽象ファクトリーパターン "は、ファクトリーパターンの現れであり、構築パターンの一つである紹介します。 抽象ファクトリーパターンには4つの役割があります:抽象的な製品の役割、具体的な...

Apr 23, 2020 · 4 min read