1.給定一個整數(shù)數(shù)組 nums?和一個目標(biāo)值 target淆九,請你在該數(shù)組中找出和為目標(biāo)值的那?兩個?整數(shù)统锤,并返回他們的數(shù)組下標(biāo)。
你可以假設(shè)每種輸入只會對應(yīng)一個答案炭庙。但是饲窿,你不能重復(fù)利用這個數(shù)組中同樣的元素。
var twoSum = function(nums, target) {
? ? for(var i = 0;i<nums.length;i++){
? ? ? for(var j = 1;j<nums.length;j++){
? ? ? ? if (j > i) {
? ? ? ? ? if (nums[i] + nums[j] == target) {
? ? ? ? ? return [i,j]
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
};
2.給定一個字符串焕蹄,請你找出其中不含有重復(fù)字符的?最長子串?的長度逾雄。
var lengthOfLongestSubstring = function(s) {
? ? var length=0
? ? //長度為零時
? ? if(s.length==0){
? ? ? return length
? ? ? }
? ? length = 1;
? ? var index = 0,has = 0
? ? for(var i=1;i<s.length;i++){
? ? ? ? //查看前i-1位是否含有第i位
? ? ? ? has = s.slice(index,i).indexOf(s[i])
? ? ? ? if(has == -1){
? ? ? ? ? ? //不包含則取長度長的
? ? ? ? ? ? length = Math.max(length,i-index+1)
? ? ? ? }else{
? ? ? ? ? ? //包含則從下一位開始匹配
? ? ? ? ? ? index = index+has+1
? ? ? ? }
? ? }
? ? return length
};
3.給出一個 32 位的有符號整數(shù),你需要將這個整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)腻脏。注意:
假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù)鸦泳,則其數(shù)值范圍為?[?231,? 231?? 1]。請根據(jù)這個假設(shè)永品,如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0做鹰。
var reverse = function(x) {
? ? var isPlus = true
? ? var num = 0
? ? if(x<0){
? ? ? ? //數(shù)值為負(fù)數(shù)時
? ? ? ? isPlus = false
? ? }
? ? x = Math.abs(x)+""
? ? //十進(jìn)制反轉(zhuǎn)取整
? ? num = parseInt(x.split("").reverse().join(""),10)
? ? //溢出取0
? ? if(num>=(Math.pow(2,31)-1)){
? ? ? ? return 0
? ? }else{
? ? ? ? if(isPlus){
? ? ? ? ? ? return num
? ? ? ? }else{
? ? ? ? ? ? return -num
? ? ? ? }
? ? }
}
4.判斷一個整數(shù)是否是回文數(shù)《悖回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)钾麸。
var isPalindrome = function(x) {
? ? if(x<0){
? ? ? ? return false
? ? }
? ? x=x+""
? ? if(x.length == 1){
? ? ? ? return true
? ? }
? ? //如果整數(shù)的長度是偶數(shù),則前半部分和后半部分反轉(zhuǎn)結(jié)果相同
? if(x.length%2==0){
? ? ? if(x.slice(0,x.length/2) == x.slice(x.length/2).split("").reverse().join("")){
? ? ? ? ? return true
? ? ? }else{
? ? ? ? ? return false
? ? ? }
? ? ? //奇數(shù)時炕桨,從中間那一位的左邊和右邊反轉(zhuǎn)相同
? }else{
? ? ? if(x.slice(0,(x.length-1)/2) ==x.slice((x.length-1)/2+1).split("").reverse().join("")){
? ? ? ? ? return true
? ? ? }else{
? ? ? ? ? return false
? ? ? }
? }
};
5.羅馬數(shù)字包含以下七種字符:?I饭尝,?V,?X献宫,?L钥平,C,D?和?M姊途。
字符? ? ? ? ? 數(shù)值
I? ? ? ? ? ? 1
V? ? ? ? ? ? 5
X? ? ? ? ? ? 10
L? ? ? ? ? ? 50
C? ? ? ? ? ? 100
D? ? ? ? ? ? 500
M? ? ? ? ? ? 1000
例如涉瘾, 羅馬數(shù)字 2 寫做?II?奈惑,即為兩個并列的 1。12 寫做?XII?睡汹,即為?X?+?II?肴甸。 27 寫做??XXVII, 即為?XX?+?V?+?II?。
通常情況下囚巴,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊原在。但也存在特例,例如 4 不寫做?IIII彤叉,而是?IV庶柿。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 秽浇。同樣地浮庐,數(shù)字 9 表示為?IX。這個特殊的規(guī)則只適用于以下六種情況:
I?可以放在?V?(5) 和?X?(10) 的左邊柬焕,來表示 4 和 9审残。
X?可以放在?L?(50) 和?C?(100) 的左邊,來表示 40 和?90斑举。?
C?可以放在?D?(500) 和?M?(1000) 的左邊搅轿,來表示?400 和?900。
給定一個羅馬數(shù)字富玷,將其轉(zhuǎn)換成整數(shù)璧坟。輸入確保在 1?到 3999 的范圍內(nèi)。
var romanToInt = function(s) {
? ? var result = 0
? ? s = s.split('')
? ? //先將所有羅馬數(shù)字相加
? ? s.forEach((v,i)=>{
? ? ? ? switch(v){
? ? ? ? ? ? case 'I': result+=1
? ? ? ? ? ? break;
? ? ? ? ? ? case 'V': result+=5
? ? ? ? ? ? break;
? ? ? ? ? ? case 'X': result+=10
? ? ? ? ? ? break;
? ? ? ? ? ? case 'L': result+=50
? ? ? ? ? ? break;
? ? ? ? ? ? case 'C': result+=100
? ? ? ? ? ? break;
? ? ? ? ? ? case 'D': result+=500
? ? ? ? ? ? break;
? ? ? ? ? ? case 'M': result+=1000
? ? ? ? ? ? break;
? ? ? ? }
? ? })
? ? //再減去特殊的羅馬數(shù)字?jǐn)?shù)值
? ? for(var i = 0;i<s.length-1;i++){
? ? ? ? switch(s[i]+s[i+1]){
? ? ? ? ? ? case 'IV':
? ? ? ? ? ? case 'IX': result-=2
? ? ? ? ? ? break;
? ? ? ? ? ? case 'XL':
? ? ? ? ? ? case 'XC': result-=20
? ? ? ? ? ? break;
? ? ? ? ? ? case 'CD':
? ? ? ? ? ? case 'CM': result-=200
? ? ? ? ? ? break;
? ? ? ? }
? ? }
? ? return result
};
6.編寫一個函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴赎懦。
如果不存在公共前綴雀鹃,返回空字符串""。
var longestCommonPrefix = function(strs) {
? ? var result = ""
? ? var shortLengthIndex = 0
? ? var shortLength = 50
? ? //長度為0時励两,直接返回""
? ? if(strs.length == 0){
? ? ? return ""
? ? }
? ? strs.forEach((v,i)=>{
? ? ? ? //獲取長度最短的字符串
? ? ? ? if(v.length<shortLength){
? ? ? ? ? ? shortLength = v.length
? ? ? ? ? ? shortLengthIndex = i
? ? ? ? }
? ? })
? ? // return shortLengthIndex
? ? ? ? // console.log(shortLengthIndex)
? ? ? ? function demo(){
? ? ? ? ? ? for(var i=0;i<strs.length;i++){?
? ? ? ? ? ? ? ? //遍歷數(shù)組黎茎,是否每個元素都含有長度最小的元素且在最前面
? ? ? ? ? ? ? ? if(strs[i].indexOf(strs[shortLengthIndex])!=0){
? ? ? ? ? ? ? ? ? if(strs[shortLengthIndex].length <= 1){
? ? ? ? ? ? ? ? ? ? ? //當(dāng)元素為1時則為沒有共同前綴,
? ? ? ? ? ? ? ? ? ? ? ? strs[shortLengthIndex] = ""
? ? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? ? //切減最小元素伐蒋,減一位工三,遞歸
? ? ? ? ? ? ? ? ? ? ? ? strs[shortLengthIndex] = strs[shortLengthIndex].slice(0,strs[shortLengthIndex].length-1)
? ? ? ? ? ? ? ? ? ? ? ? demo()
//? ? ? ? ? ? ? ? ? ? ? ? ? return strs[shortLengthIndex]
//? ? ? ? ? ? ? ? ? ? ? ? console.log(strs[shortLengthIndex])
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? }
? ? }
? demo()
? return strs[shortLengthIndex]
};