8.2 字符串中等(阅读难度) 165 Compare Version Numbers 299 Bulls and Cows
创始人
2024-11-13 14:37:32
0

今天两道题难点都在读懂题目要求,思路并不难

165 Compare Version Numbers

class Solution { public:     vector> getVersion(string s){         vector> v;         vector current;         for(char ch : s){             //忽略前导零             if(ch == '0' && current.empty()){                 continue;             }             //记录数值             if(ch != '.'){                current.push_back(ch-'0');             }else{                 v.push_back(current);                 current.clear();              }         }         v.push_back(current);         return v;     }     int vectorToInt(vector num){         int res = 0;         int n = num.size();         if(n == 0){             return 0;         }         for(int i = 0 ; i < n ; i++){             res = res * 10 + num[i];         }         return res;     }     int compareVersion(string version1, string version2) {         /* 读题         //比较版本号-->修订号转为int 并忽略前导零         //从左到右一个个比较,忽略前导零         //如果v1v2 1 否则0*/          //主体遍历:单项思维:遇到.就比较后面的值转为int题目中都告诉了是肯定可以被int承载的         vector> v1 , v2;         v1 = getVersion(version1);         v2 = getVersion(version2);         //获取修订号:忽略前导零 且 拆分版本号         //遍历对应的v1[0] v2[0]要获取这俩的整数         int n1 = v1.size(), n2 = v2.size();         int n = max(n1, n2);         for(int i = 0 ; i < n;i++){             int num1 = i < n1 ? vectorToInt(v1[i]) : 0;             int num2 = i < n2 ? vectorToInt(v2[i]) : 0;              if(num1 > num2) return 1;             if(num1 < num2) return -1;         }         return 0;              } }; 

c++代码学习

1. 二维数组的输入 vector> v; vector current; 先填满current 在v.push_back(current); current.clear();然后重复这个过程  2. 将数组中的数字组合为一个整数 pow会导致浮点数计算,尽量避免: for(int i = 0 ; i < n ; i++){       res = res * 10 + num[i]; }		  

299 Bulls and Cows

在这里插入图片描述

class Solution { public:     string getHint(string secret, string guess) {     	/* 读题         //玩bulls & cows这个游戏         //我写一个数字 让我朋友猜         //猜了以后:bulls代表在正确位置且数字也对了A cows不在正确位置但是数字对了 B         //返回形式 "xAyB"x和y都有可能是三位数 不是个位数 */                  string res = "";         int n = secret.size() , bulls =0 ,cows=0;         //判断bull公牛数          for(int i = 0 ; i < n ; i ++){             if(secret[i] == guess[i]){                 bulls++;                 secret[i] = 'b';                 guess[i] = 'b';             }         }         //难点1:cows奶牛数的判别 数字对了但是位置不对,那就是说有多少个不重复的相同数字n^2         for(int i = 0 ; i < n ; i++){             char ch1 = secret[i];             if(!isdigit(ch1))continue;             for(int j = 0 ; j < n ; j++){                 char ch2 = guess[j];                 if(!isdigit(ch2))continue;                 if(ch1 == ch2){                     cows++;                     guess[j] = 'c';                     break;                 }             }         }         //难点2:多位数字转字符 to_string         res.append(to_string(bulls));         res += 'A';         res.append(to_string(cows));         res += 'B';         return res;     } }; 

时间复杂度为 O ( n 2 ) O(n^2) O(n2),官方题解中有为 O ( n ) O(n) O(n)的算法。这个是类似于之前建立26字母表计数的方法。【review 7.26 242 Valid Anagram几乎一模一样】思路练习:387 First Unique Character in a String 389 Find the Difference

class Solution { public:     string getHint(string secret, string guess) {         int n = secret.size();         int bulls = 0 , cows = 0;         vector secretCount(10 , 0) , guessCount(10 , 0);         for(int i = 0 ; i < n ; i ++){             if(secret[i] == guess[i]){                 bulls++;             }             else{                 secretCount[secret[i] - '0']++;                 guessCount[guess[i] - '0']++;             }         }          //计算奶牛数         for(int i = 0 ; i <10 ; i++){             cows += min(secretCount[i] , guessCount[i]);         }          return to_string(bulls)+'A'+to_string(cows)+'B';     } }; 

字符串题中 寻找两字符串中相同字符数目,且不要求位置一致时,转换思路为计算整个字符串中不同字符的数目,取两个字符串中计数较小的值即为ans。

相关内容

热门资讯

绝活儿辅助!广西老友玩老是输怎... 绝活儿辅助!广西老友玩老是输怎么办(辅助挂)都是真的有辅助app(讲解有挂)在进入广西老友玩老是输怎...
法门辅助!福建13水插件(辅助... 法门辅助!福建13水插件(辅助挂)一贯是有辅助技巧(有挂技术)1、许多玩家不知道福建13水插件辅助怎...
办法辅助!潮友会app下载官方... 办法辅助!潮友会app下载官方辅助器(辅助挂)真是真的是有辅助app(有挂教程)该软件可以轻松地帮助...
妙招辅助!邯郸胡乐挂辅助(辅助... 妙招辅助!邯郸胡乐挂辅助(辅助挂)好像存在有辅助插件(有挂方略)1、上手简单,内置详细流程视频教学,...
教程书辅助!乐酷辅助(辅助挂)... 教程书辅助!乐酷辅助(辅助挂)其实存在有辅助脚本(有挂细节)乐酷辅助能透视中分为三种模型:乐酷辅助模...
学习辅助!决战卡五星辅助(辅助... 学习辅助!决战卡五星辅助(辅助挂)本来真的是有辅助软件(有人有挂)学习辅助!决战卡五星辅助(辅助挂)...
绝活辅助!边锋嘉兴麻将辅助器(... 绝活辅助!边锋嘉兴麻将辅助器(辅助挂)真是真的有辅助神器(新版有挂)1、边锋嘉兴麻将辅助器公共底牌简...
举措辅助!枫叶辅助器(辅助挂)... 举措辅助!枫叶辅助器(辅助挂)本来存在有辅助技巧(竟然有挂)1、下载好枫叶辅助器正确养号方法之后点击...
讲义辅助!点我达辅助(辅助挂)... 讲义辅助!点我达辅助(辅助挂)一直存在有辅助技巧(有人有挂)1、点我达辅助辅助器安装包、点我达辅助辅...
模块辅助!威信茶馆有挂的吗(辅... 模块辅助!威信茶馆有挂的吗(辅助挂)一直真的是有辅助脚本(揭秘有挂)1、玩家可以在威信茶馆有挂的吗线...